Owncloud an bestehende Authentifizierungsysteme anbinden

Owncloud bietet ab der Version 6 neben den üblichen interessanten Features eine kollaborative Textverarbeitung an, d.h. mehrere Benutzer können genau wie bei Etherpad oder Etherpad lite gleichzeitig an einem Dokument arbeiten. Die Formatierungsmöglichkeiten sind dabei umfangreicher als bei der Etherpadderivaten, jedoch gegenüber Lösungen wir GoogleDocs noch recht rudimentär. Für viele Anwendungsfälle reicht es jedoch vollauf. Wer möchte, darf das hier nach Eingabe eines Spitznamens gerne einmal ausprobieren. Owncloud nutzt ODT als natives Format.

Viele Schulen möchten gerne Owncloud nutzen und verfügen oft schon über eine Schulserverlösung. Idealerweise bietet diese bereits E-Mailadressen für alle Schulangehörigen über das IMAP-Protokoll an. Das ist z.B. bei IServ der Fall – einer in Niedersachsen sehr verbreiteten Lösung. Durch zwei kleine Änderungen muss keine separate Nutzerverwaltung in Owncloud mehr betrieben werden, wenn bereits ein IMAP-Server im Schulnetz vorhanden ist.

Es kann eine Grundinstallation von Owncloud als Basis genommen werden. Bei den Apps muss „External user support“ zuvor aktiviert werden. Eine Datei ist danach zu ändern, eine hinzuzufügen.

Zu ändernde Datei

Name: config/config.php

Quellcode:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
require_once(dirname(__FILE__).'/../apps/user_external/lib/imap_new.php');
 
$CONFIG = array (
  'instanceid' => '<hier_steht_schon_etwas>',
  'passwordsalt' => '<hier_steht_schon_etwas>',
  'datadirectory' => '<hier_steht_schon_etwas>',
  'dbtype' => 'mysql',
  'version' => '6.0.0.14',
  'dbname' => '<hier_steht_schon_etwas>',
  'dbhost' => 'localhost',
  'dbtableprefix' => 'oc_',
  'dbuser' => '<hier_steht_schon_etwas>',
  'dbpassword' => '<hier_steht_schon_etwas>',
  'installed' => true,
  'forcessl' => true,
  'user_backends'=>array(
   array(
      'class'=>'OC_User_IMAP',
      'arguments'=>array('{<server>:<port>/imap/ssl/novalidate-cert}')
   )
  ),
);

Kommentar:
In Zeile 2 wird der neu zu erstellende Code (s.u.) eingebunden, ab Zeile 17 wird es interessant, vor allem in der Zeile, die mit „arguments“ beginnt. Die Angaben für Server und Port sind mit den eigenen Angaben zu füllen. Ich brauche für den IServ die Angabe „novalidate-cert“, da es sich um ein selbstsigniertes Cert handelt – daher zicken auch Applegeräte gerne mit dem IServ, weil sie sich in der Fehlermeldung nicht klar ausdrücken. Nutzt man eine unverschlüsselte Verbindung, was allenfalls zu Testzwecken dienlich ist, sieht das z.B. so aus:

      'arguments'=>array('{meinserver.xy:143/imap}')

Hinzuzufügende Datei:

Name: apps/user_external/lib/imap_new.php

Quellcode:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
/**
 * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
 * This file is licensed under the Affero General Public License version 3 or
 * later.
 * See the COPYING-README file.
 */
 
class OC_User_IMAP extends OC_User_Backend{
        private $mailbox;
 
        public function __construct($mailbox) {
                $this->mailbox=$mailbox;
        }
 
        /**
         * @brief Check if the password is correct
         * @param $uid The username
         * @param $password The password
         * @returns true/false
         *
         * Check if the password is correct without logging in the user
         */
        public function checkPassword($uid, $password) {
 
                $mbox = @imap_open($this->mailbox, $uid, $password);
                imap_errors();
                imap_alerts();
 
 
                if($mbox) {
                        imap_close($mbox);
 
                        if(OC_User::userExists($uid)) {
                                  OC_User::setPassword($uid, $password);
                        } else {
                                  OC_User::createUser($uid, $password);
                                  $uida=explode('@',$uid,2);
                                  if(($uida[1] || '') !== '') {
                                        OC_Group::createGroup($uida[1]);
                                        OC_Group::addToGroup($uid, $uida[1]);
                       }
 
                }
                        return $uid;
                } else {
                        return false;
                }
        }
 
}

Kommentar:
Dieses Codestück sorgt dafür, dass beim ersten Login eines Benutzers ein Eintrag in die User-Datenbank von Owncloud erfolgt. Dabei wird auch das Passwort verschlüsselt gespeichert, da ansonsten keine Nutzung über die Apps von Owncloud möglich ist. Der Nutzer muss sich mit den gleichen Daten wie am E-Mailserver anmelden. Ändert der Nutzer sein Passwort im IServ oder auf dem E-Mailserver, wird diese Änderung bei bestehendem Login in Owncloud übernommen.

Update:
Mit dem Hack funktioniert auch die Nutzung mit der Owncloud-App problemlos.

Facebook Like

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.