Identity
UNITED-PAGES kann als verteilter Authentifizierungs-Service genutzt werden. Die Authentifizierung bei einem PROVIDER kann von anderen Services (Webportal) verifiziert werden und somit ein eigenes Login-Verfahren (z.B.mit eigenen Passwörtern) obsolet machen.
In folgendem Beispiel möchte sich Alice via UNITED-PAGES beim Service xy-service.com anmelden (Parameter in https-Aufrufen müssen urlencoded übergeben werden. Nur zur besseren Lesbarkeit werden im folgenden {} verwendet, z.B. _mail={alice@amail.com} statt _mail=alice%40amail.com)
SERVICE:
- auf der Startseite kann die Email-Adresse eingegeben werden, falls diese nicht bereits durch einen entsprechend parametrisierten Aufruf bekannt ist e.g.
https://www.xy-service.com/login.html?member={alice@amail.com}&room={cal/bob@bmail.com?id=team} - auf der Startseite wird ein Button 'Login via UNITED-PAGES' angeboten. Falls die email-adresse durch den Aufruf bereits bekannt ist und es keine Alternative zu einem Login via UNITED-PAGES gibt kann auch dieser Schritt übersprungen werden
- aus der Email-Adresse des Nutzers kann die Startseite seines PROVIDERs bestimmt werden e.g. falls amail.com UNITED-PAGES nicht unterstützt
https://www.united-pages.com/unit
(dort befindet sich z.B. index.html oder index.php) - optional kann intern ein Identifikator für den Login-Vorgang angelegt werden (e.g. alice123), intern gespeichert und als Parameter dem anschließenden callback mitgegeben werden
- gemäß Namenskonvention muss die Startseite jedes Providers mit den Parametern _mail und _cb aufgerufen werden. Die Parameter innerhalb von _cb dürfen nicht _mail, _token oder _error enthalten e.g.
https://www.united-pages.com/unit?_mail={alice@amail.com}&_cb={https://www.xy-service.com/up-login.html?id={alice123}&room={cal/bob@bmail.com?id=team1}}
PROVIDER:
- nach korrektem Login wird intern eine tok-UNIT angelegt. Diese enthält einen automatisch generierten token-String (e.g. abc!!!213), das Ende der Gültigkeit (aktuelle Zeit + 1 Minute) und den HOST (e.g. www.xy-service.com) der callback-URL (e.g. in PHP ermittelt via: parse_url("https://https://www.xy-service.com/up-login.htm...", PHP_URL_HOST)). Durch zusätzliche Speicherung des HOST lässt sich bei der späteren Prüfung der Gültigkeit des token durch den Service sicherstellen, dass das token nicht durch einen anderen Service in Auftrag gegeben wurde. Abschließend wird die callback-URL aus _cb ergämzt um die Parameter _mail und _token aufgerufen e.g.
https://www.xy-service.com/up-login.html?room={cal/bob@bmail.com?id=team1}&id={alice123}&_mail={alice@amail.com}&_token={abc!!!123} - ist der Login fehlgeschlagen wird der callback statt mit _token mit _error aufgerufen e.g.
https://www.xy-service.com/up-login.html?room={cal/bob@bmail.com?id=team1}&id={alice123}&_mail={alice@amail.com}&_error=401
SERVICE:
- durch das optionale Prüfen eines Identifikators kann sicher gestellt werden, dass der callback nur auf ursprüngliche Initiative des Service hin aufgerufen worden ist. Der Identifikator wurde im Beispiel im Parameter id mitgegeben.
- die callback-Parameter _mail/_token können innerhalb des Gültigkeitszeitraums (1 Minute) durch Löschen der entsprechende tok-UNIT geprüft werden. Dadurch ist sichergestellt, dass ein token, das in falsche Hände gerät nicht erneut verwendet werden kann e.g.
DELETE https://www.united-pages.com/unit/tok/alice/amail.com?_token={abc!!!123}&_service={www.xy-service.com}
UP-Provider
Token
Ein Token wird als tok-UNIT in UNITED-PAGES implementiert. Die Variable token hält dabei den eigentlichen Wert.
Variable | DataType | Semantik | Example |
token | String(48) | token-id der UNIT (random) | abc123 |
service | String(48) | HOST of callback webservice | www.xy-service.com |
eat | timestamp(RFC 3339) | expiration at default: time of creation + 60sec |
2020-12-31T12:00:33+01:00 |
Aus einer Email-Adresse und dem Wert der token-Variable kann die URL der tok-UNIT bestimmt werden, e.g.
- Email: John.Doe@goohoo.com
- token: abc123
- URI: unit://tok/john.doe@goohoo.com?token=abc123
- URL: https://.../tok/john.doe/goohoo.com?token=abc123
Eine tok-UNIT kann auch mit einem authentifizierten POST-request angelegt werden:
POST | Example |
URL | https://www.united-pages.com/unit/tok/john.doe/goohoo.com |
HTTP-Authentication | User: john.doe@goohoo.com Password: <PIN> |
Body |
{ "token":"159246", |
Response | { "expiration":"2020-05-12T10:19:30+00:00" } |
Eine tok-UNIT kann mit einem DELETE-request ohne Authentifizierung verifiziert werden
DELETE | Example |
URL | https://www.united-pages.com/unit/tok/john.doe/goohoo.com?token=159246&service=www.xy-service.com |
Response | {} |
Response-Status | 200 (valid token,; if singular == true then tok-UNIT is deleted) 400 (no valid token; if expiration has passed then tok-UNIT is deleted) |
Domain
Jeder UP-Provider muss für jede einzelne Email-Domäne für die er verantwortlich ist eine dom-UNIT bei united-pages.com registrieren (lassen) e.g.
https://www.united-pages.com/dom/goohoo.com
https://www.united-pages.com/dom/goohoo.de
https://www.united-pages.com/dom/goohoo.gov
Zwingend notwendig ist die Angabe des unit_path ohne den kein Zugriff auf UNITs erfolgen kann. Die login_url muss konfiguriert werden, wenn der UP-Provider das Ident-Verfahren für Webportale unterstützt.
Variable | DataType | Semantik | Example |
unit_path | String(48) | URL-prefix für alle RESTful-)Webservice-Requests auf UNITs von Nutzern der Domain | www.goohoo.com/up |
login_url | String(64) | URL für Webportal-Login (muss die Variablen $user und $service enthalten) | www.goohoo.com/login.html?user=$user&callback=$service |
Für den Zugriff via GET-request wird lediglich die Email-Domäne an https://www.united-pages.com/dom ergänzt
GET | Example |
URL | https://www.united-pages.com/dom/goohoo.com |
Response | { "unit_path":"www.goohoo.com/up", "login_url":"www.goohoo.com/login.html?user=$user&callback=$service" } |
Webportal
Applikation
Damit ein Webportal von einer Applikation gestartet werden kann muss es einen URL bieten, der als Parameter eine Email und einen Token übergeben bekommt. Dieser URL muss in einer sce-UNIT (bei einem beliebigen UP-Provider) in der Variable url konfiguriert sein,
Variables | Example |
subject | ... |
description | ... |
url | https.//www.servicexy.com/login.html?user=$email&tok=$token |
Für den Aufruf des Webportals muss die Applikation die Platzhalter $email bzw. $token mit der Email-Adresse des Nutzers bzw. dem token aus der zuvor (mit obigem POST-request) angelegten tok-UNIT (http-encodiert) ersetzt werden e.g.
https://www.service.xy.com/login.html?email=john.doe%40gohoo.com&tok=159264
Browser
Damit ein Nutzer (nach Angabe seiner Email-Adresse) von einem Webportal auf die Login-Page seines UP-Providers umgeleitet werden kann, muss der UP-Provider des Nutzers bei united-pages.com eine entsprechende dom-UNIT für die Email-Domain des Nutzers registriert haben und dort login-url konfiguriert sein.
login_url seines UP-Providers e.g.
https://www.goohoo.com/login.html?user=john.doe%40gohoo.com&callback=159264
"login_url":"www.goohoo.com/login.html?user=$user&callback=$service"
Requirements
Folgende Voraussetzungen müssen bei den beteiligten Rollen erfüllt sein:
- Webservice
(1) Der Webservice muss eine sceLogin-URL bieten und dementsprechend als sce-UNIT konfiguriert werden (sce-URI)
- Nutzer
(2) der Nutzer muss bei UNITED-PAGES registriert sein
(3) der Nutzer muss eine UP-Application nutzen, die sce-UNITs unterstützt
(4) der Nutzer muss eine UP-Application nutzen, die die Berechtigung hat um eine tok-UNIT unter seinem Account anzulegen
Entweder muss die UP-Application über den beim UP-Provider vom Nutzer konfigurierten MasterPin Kenntnis haben (z.B. durch manuelle Einstellung bei der UP-Application) oder das UP-Portal des jeweiligen UP-Provider wird eingebunden , d.h. der Nutzer logged sich bei seinem UP-Portal ein, das eine tok-UNIT anlegt und im Anschluss den Webservice aufruft
- UP-Provider
(6) der UP-Provider muss die tok-UNIT unterstützen
Eine tok-UNIT beinhaltet ein Token und ein Ablaufdatum. Der Token kann vom UP-Webserver generiert werden oder beim Anlegen übergeben werden. Das Ablaufdatum kann durch die Angabe einer Zeitspanne (in seconds) festgelegt werden (Default: 60 sec).
Login via UP-Application
Das Verfahren unter Nutzung einer UP-Application umfasst folgende Schritte:
1. Nutzer
wählt in der UP-Application die sce-UNIT des zu startenden Webservice aus
2. UP-Application
die UP-Application startet einen GET-request auf die sce-UNIT (sofern nicht im Cache)
Method | GET |
sce-URL | https://www.united-pages.com/unit/sce/all/upservices.com?service=xy |
Response | { "urla":"https://www.xyportal.com/login.html?token=$token&email=$email", ... } |
3. UP-Application
Die UP-Application legt beim UP-Provider des Nutzers eine neue tok-UNIT an
Method | POST |
tok-URL | https://api.goohoo.com/upage/tok/john.doe/goohoo.com |
Body - if token not set, it will be generated and returned |
|
HTTP-Authenication - username is email of user |
username: |
Response - expiration is internal time of webserver plus seconds |
|
4. UP-Application
Die UP-Application ersetzt die Parameter in der sceLogin-URL ($email, $token) und startet den Webservice
webservice-URL (http-encoded) |
https://www.xyportal.com/start.html?token=ttt123&email=john.doe%40goohoo.com" |
5. Webservice
Der Webservice führt die Authentifikation durch Aufruf eines DELETE-request durch
Method | DELETE |
tok-URL | https://api.goohoo.com/up/tok/john.doe/goohoo.com?token=ttt123 |
Der DELETE-Request auf eine tok-UNIT benötigt (im Gegensatz zu allen anderen UNIT-Typen) keine (HTTP-)Authentifizierung. Das token kann im Body aber (wie in obigem Beispiel) auch als Parameter übergeben werden, da es nur einmalig genutzt werden kann. Dies ist nach einem erfolgreichen DELETE-request(ResponseStatus = 200) garantiert. Der DELETE-request auf ein ungültiges token (ResponseStatus != 200) hat keine weiteren Auswirkungen.
6. Webservice
Im Falle einer positiven Response (200) erfolgt ein Login ohne Passwort-Abfrage.
Login via UP-Portal
Das Verfahren unter Nutzung eines UP-Provider-Portals umfasst folgende Schritte.
1. Nutzer
der Nutzer ruft eine upLogin-URL seines UP-Provders auf, die wiederum als callback-Parameter eine sceLogin-URL des Kundenportals enthält
upLogin-URL (callback not HTTP-encoded for better readability) |
https://www.united-pages.com/login.html?user=john.doe%40goohoo,com& |
2. Nutzer
Der Nutzer bekommt die Login-Seite seines UP-Provider-Portals und gibt sein Passwort ein
3. UP-Provider-Portal
Autentifizierung des Nutzers (Prüfung des Passworts)
4. UP-Provider-Portal
Anlegen einer tok-UNIT
5. UP-Provider-Portal
Aufruf der callback-URL mit entsprechender Email-Adresse und Zugriffstoken
6. Kundenportal
Das Kundenportal führt die Authentifikation durch Aufruf eines DELETE-request durch (siehe oben)
7. Kundenportal
Das Kundenportal öffnet sich dem Nutzer ohne weitere Eingabe eines Passworts
- ein USER wählt einen URL-link eines Kundenportals aus, der durch GET-request einer sce-UNIT erhalten wurde e.g.
GET https://www.../sce/service/united-pages.com?id=xy -> { "url_a":"https://www.servicexy.com/login.html?user=$email&pw=$token" } - enthält eine URL die Platzhalter $email und $token bedeutet das, dass das Ident-Verfahren von UNITED-PAGES beim Aufruf unterstützt wird. Dann legt die Applikation durch einen authentifizierten POST-Request (Public-Key-Verfahren) unter Angabe der sce-URI bei seinem UP-Provider ein temporäres Token(in Form einer tok-UNIT) an. Als Antwort wird eine Token-ID (token) zurückgegeben e.g.
POST https://www.../tok/john.doe/goohoo.com?sce=service%40united-pages.com?id=xy -> { "token":"abc123" } - unmittelbar danach ersetzt die Applikation die Platzhalter in der URL und ruft diese auf e.g.
https://www.servicexy.com/login.html?user=john.doe%40goohoo.com&pw=abc123 - das Kundenportal kann aus der Email und der Token-ID die URL der entsprechenden tok-UNIT ableiten, die Gültigkeit durch GET-request verifizieren und mit der Antwort zudem überprüfen, ob der Token für den eigenen Service generiert wurde e.g.
GET https://www.../tok/john.doe/goohoo.com?token=abc123 -> { "service":"sce/service@united-pages.com?id=xy", ... }
*HTTP-Encodierung
Wert | HTTP-Encodierung |
@ | %40 |
= | %3D |
? | %3F |
/ | %2F |
& | %26 |