Änderungen

OAuth

3.896 Byte hinzugefügt, 23:09, 4. Okt. 2018
Die Seite wurde neu angelegt: „sourceDESK kann als OAuth-Identitätsserver für andere Applikationen dienen. Dies kann dazu genutzt werden, sourceDESK als Identitätsprovider in Ihrem Untern…“
sourceDESK kann als OAuth-Identitätsserver für andere Applikationen dienen. Dies kann dazu genutzt werden, sourceDESK als Identitätsprovider in Ihrem Unternehmen zu nutzen und so Zugriffsrechte und Zugangsdaten zentral zu verwalten.

== Aktivierung des OAuth-Systems ==
Zur Aktivierung des OAuth-Systems müssen die Addons "OAuth-Server" und "OAuth-Konfiguration" aktiviert werden. Allen Administratoren, die sich via OAuth authentifizieren dürfen sollen, muss ein Zugriffsrecht für das Addon "OAuth-Server" eingeräumt werden. Administratoren des OAuth-Systems muss ein Zugriffsrecht für das Addon "OAuth-Konfiguration" eingeräumt werden.

== Konfiguration des OAuth-Systems ==
Administratoren mit Zugriffsrecht für das Addon "OAuth-Konfiguration" können die Client-Systeme konfigurieren. Dazu rufen Sie die Konfiguration unter "Addons > OAuth2" auf. Um einen Client zu erstellen benötigen Sie eine alphanumerische Client-ID und eine Redirect-URL, auf die der zu Authentifizierende nach erfolgreicher Authentifizierung weitergeleitet wird. Bei Erstellung eines Clients wird Ihnen einmalig das Client-Secret angezeigt, bitte notieren Sie sich dieses, da es später nur noch über die Datenbank abgerufen werden kann und aus Sicherheitsgründen nicht mehr angezeigt wird.

== Konfiguration des Clients ==
Token-URL: <code>SOURCEDESK_URL/oauth2</code>

Authentication-URL: <code>SOURCEDESK_URL/admin/?p=oauth2</code>

Userdata-URL: <code>SOURCEDESK_URL/oauth2/user</code>

== Ablauf der Authentifizierung ==
A = Authentifizierungs-Server (sourceDESK)

B = Dritt-Applikation, die Authentifizierung möglich

C = Administrator

# C bittet B um Login
# B bittet A um Challenge
# B leitet C auf Challenge-Seite weiter
# C identifiziert sich gegenüber A
# A leitet C zu B weiter (mit Response)
# B verifiziert Authentifizierung bei A, ruft die Daten von C bei A ab und führt den Login durch

== Beispiel-Implementierung in PHP ==

Das nachfolgende Beispiel zeigt eine beispielhafte Implementierung einer OAuth-Identifizierung mit sourceDESK als Authentifizierungsserver in PHP:

<source lang="php">
$authenticated = false;

$oauthAuthUrl = "https://sourceway.de/admin/?p=oauth2";
$oauthTokenUrl = "https://sourceway.de/de/oauth2";
$oauthUserUrl = "https://sourceway.de/de/oauth2/user";
$oauthJsonPath = "email";
$oauthJsonValue = ["max@mustermann.de", "john@doe.com"];
$oauthClient = "some_client";
$oauthSecret = "pn3g7pgpy36jtegj68j98t34kf6prtmb";

if (!$authenticated && isset($_GET['code'])) {
$pars = [
"grant_type" => "authorization_code",
"client_id" => $oauthClient,
"client_secret" => $oauthSecret,
"code" => $_GET['code'],
];
$ch = curl_init($oauthTokenUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($pars));
$res = json_decode(curl_exec($ch));
curl_close($ch);

if(is_object($res) && isset($res->access_token)){
$ch = curl_init($oauthUserUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(["access_token" => "Bearer " . $res->access_token]));
$res = json_decode(curl_exec($ch));
curl_close($ch);
$ex = explode(",", $oauthJsonPath);
$current = $res;

foreach($ex as $p){
if(!isset($current->$p)) continue;
$current = $current->$p;
}

if(in_array($current, $oauthJsonValue)){
$authenticated = true;
}
}
}

if ($authenticated) {
echo "Some protected content";
} else {
$ex = explode("?", $oauthAuthUrl);
if(count($ex) == 2) parse_str($ex[1], $pars);
else $pars = [];
$pars["client_id"] = $oauthClient;
$pars["state"] = "1";
$pars["response_type"] = "code";
header('Location: ' . $ex[0] . "?" . http_build_query($pars));
exit;
}
</source>