Informationen zur Authentifizierung zwischen Python-Anwendungen und Oracle Identity Cloud Service
Sie können sich mit der Authentifizierung zwischen Python-Webanwendungen und Oracle Identity Cloud Service vertraut machen. Dies umfasst die folgenden Kenntnisse:
-
Anwendungsfälle für die Verwendung eines SDK mit einer Python-Anwendung zur Authentifizierung mit Oracle Identity Cloud Service.
-
Der dreibeinige Authentifizierungs-Flow, den Oracle Identity Cloud Service für Python SDK unterstützt
-
Methoden und Funktionen des Python-SDK
Informationen zu überlappenden Authentifizierungsflüssen
Oracle Identity Cloud Service unterstützt den dreibeinigen Authentifizierungs-Flow für Python SDK. In diesem Ablauf interagieren Benutzer direkt mit Oracle Identity Cloud Service. Nachdem sich ein Benutzer angemeldet hat, gibt Oracle Identity Cloud Service einen Autorisierungscode aus, den das SDK für ein Benutzerzugriffstoken austauscht. Dieses Zugriffstoken kann von der Python-Anwendung verwendet werden, um Benutzern Zugriff auf die geschützten Ressourcen in der Anwendung zu erteilen. Der dreibeinige Flow verwendet den Berechtigungscodeerteilungstyp.
Um höhere Sicherheit zu gewährleisten, empfiehlt Oracle, dass Sie Ihre Python-Webanwendungen mit dreibeinigen in Oracle Identity Cloud Service zur Authentifizierung integrieren. Wenn Sie den Berechtigungstyp für den Autorisierungscode verwenden, können Sie auch auf andere Anwendungen zugreifen, die von Oracle Identity Cloud Service geschützt sind, ohne sich erneut authentifizieren zu müssen.
Weitere Informationen zu den primären Anwendungsfällen für die Verwendung eines SDK mit einer Python-Anwendung
Die Python-Webanwendung implementiert zwei Anwendungsfälle: einen für die Authentifizierung von Benutzern und einen anderen für den Zugriff auf detaillierte Informationen zu dem angemeldeten Benutzer.
In den folgenden Datenflussdiagrammen wird der Fluss von Ereignissen, Aufrufen und Antworten zwischen dem Webbrowser, der Webanwendung und Oracle Identity Cloud Service für jeden Anwendungsfall dargestellt.
Abbildung - Anwendungsfall 1: Benutzerauthentifizierung
![Beschreibung von Abbildung - folgt Beschreibung von Abbildung - folgt](img/authenticate-user.png)
Beschreibung von "Abbildung - Anwendungsfall 1: Benutzerauthentifizierung"
Der Datenfluss wird wie folgt ausgeführt:
-
Der Benutzer benötigt eine geschützte Ressource.
-
Das Authentifizierungsmodul verwendet das SDK, um eine request-authorization-code-URL für Oracle Identity Cloud Service zu generieren und diese URL als Umleitungsantwort an den Webbrowser zu senden.
-
Der Webbrowser ruft die URL auf.
-
Die Anmeldeseite für Oracle Identity Cloud Service wird angezeigt.
-
Der Benutzer leitet seine Zugangsdaten für die Oracle Identity Cloud Service -Anmeldung weiter.
-
Nachdem sich der Benutzer erfolgreich angemeldet hat, erstellt Oracle Identity Cloud Service eine Session für den Benutzer und gibt einen Autorisierungscode aus.
-
Die Webanwendung erstellt einen Backend- (oder Server-zu-Server-) Aufruf zum Austausch des Autorisierungscodes für ein Benutzerzugriffstoken.
-
Oracle Identity Cloud Service gibt das Zugriffstoken aus.
-
Eine Session wird hergestellt, und der Benutzer wird auf die Homepage umgeleitet.
-
Die Homepage der Webanwendung wird angezeigt.
Abbildung - Anwendungsfall 2: Benutzerdetails abrufen
![Beschreibung von Abbildung - folgt Beschreibung von Abbildung - folgt](img/get-details-user.png)
Beschreibung von "Abbildung - Anwendungsfall 2: Benutzerdetails abrufen"
Der Datenfluss wird wie folgt ausgeführt:
-
Der Benutzer fordert die
/myProfile
-Ressource an. -
Die Webanwendung ruft Oracle Identity Cloud Service mit dem SDK auf, das das Zugriffstoken verwendet, das in der Benutzersession als Parameter gespeichert ist.
-
Die Benutzerdetails werden als JSON-Objekt an die Webanwendung gesendet.
-
Auf der Seite "Mein Profil" wird das JSON-Objekt als HTML-Inhalt wiedergegeben.
Weitere Informationen zu Methoden und Funktionen des Python-SDK
Das Python-SDK ist als zwei Python-Dateien verfügbar, IdcsClient.py
und Constants.py
, die Sie in Ihre Webanwendung aufnehmen müssen. Diese Python-Dateien sind von Fremdbibliotheken abhängig, die ebenfalls in Ihrer Anwendung enthalten sein müssen. Um sie einzubeziehen, führen Sie die folgenden pip install
-Befehle aus:
pip install simplejson==3.13.2 pip install cryptography==2.1.4 pip install PyJWT==1.5.2 pip install requests==2.18.4 pip install six==1.10.0 pip install py3_lru_cache==0.1.6
Diese Beispielanwendung wurde mit dem Python- DJango -Framework entwickelt, das URL-Routen in Form von Funktionen implementiert.
Das Python-SDK erfordert eine JSON-Variable, die mit Oracle Identity Cloud Service -Verbindungsinformationen geladen wird. Die Python-Webanwendung verwendet eine config.json
-Datei mit den folgenden Informationen.
//Oracle Identity Cloud Service connection parameters as a json var { "ClientId" : "clientid", "ClientSecret" : "clientsecret", "BaseUrl" : "https://idcs-1234.identity.oraclecloud.com", "AudienceServiceUrl" : "https://idcs-1234.identity.oraclecloud.com", "TokenIssuer" : "https://identity.oraclecloud.com", "scope" : "urn:opc:idm:t.user.me openid", "redirectURL": "http://localhost:8000/callback", "logoutSufix":"/oauth2/v1/userlogout" }
Im Folgenden finden Sie eine kurze Erläuterung jedes erforderlichen Attributs für dieses SDK:
Tabelle - Erforderliche Attribute für Python-SDK
Attributname | Attributbeschreibung |
---|---|
ClientId |
Der Wert der Client-ID, die generiert wird, nachdem Sie die Webanwendung mit der Oracle Identity Cloud Service -Konsole registriert haben. |
ClientSecret |
Der Wert des Client Secret, das generiert wird, nachdem Sie die Webanwendung mit der Oracle Identity Cloud Service -Konsole registriert haben. |
BaseUrl |
Die Domain-URL der Oracle Identity Cloud Service -Instanz. |
AdminServiceUrl |
Die Domain-Name-URL Ihrer Oracle Identity Cloud Service -Instanz. Dies ist im Allgemeinen mit BaseUrl identisch.
|
TokenIssuer |
Den Wert hier beibehalten. |
scope |
Der Geltungsbereich steuert die Daten, auf die die Anwendung zugreifen oder sie für den Benutzer verarbeiten kann. Da die Anwendung das SDK zur Authentifizierung verwendet, lautet der Geltungsbereich openid . Die Anwendung implementiert auch den Anwendungsfall get user details , für den Sie auch den Geltungsbereich urn:opc:idm:t.user.me verwenden müssen.
|
Die Attribute logoutSufix
und redirectURL
werden beide von der Anwendung verwendet. Daher sind sie nicht für das SDK erforderlich.
Die Anwendung implementiert die auth
-Funktionsdefinition, die die /auth
-URL zuordnet. Wenn ein Benutzer sich bei Oracle Identity Cloud Service authentifiziert, sendet der Browser eine Anforderung für diese URL.
Die Funktion auth
initialisiert den Authentication Manager, verwendet die JSON-Konfigurationsattribute als Parameter, verwendet das SDK, um die Oracle Identity Cloud Service -Autorisierungscode-URL zu generieren, und leitet dann den Browser zu dieser URL um.
#Loading the SDK Python file. from . import IdcsClient #Function used to load the configurations from the config.json file def getOptions(): fo = open("config.json", "r") config = fo.read() options = json.loads(config) return options # Definition of the /auth route def auth(request): #Loading the configurations options = getOptions() #Authentication Manager loaded with the configurations. am = IdcsClient.AuthenticationManager(options) #Using Authentication Manager to generate the Authorization Code URL, passing the #application's callback URL as parameter, along with code value and code parameter. url = am.getAuthorizationCodeUrl(options["redirectURL"], options["scope"], "1234", "code") #Redirecting the browser to the Oracle Identity Cloud Service Authorization URL. return HttpResponseRedirect(url)
Die folgenden Parameter werden zum Generieren der Autorisierungscode-URL verwendet:
Tabelle - Parameter zum Generieren der Autorisierungscode-URL
Parametername | Parameterbeschreibung |
---|---|
options["redirectURL"] |
Nach der erfolgreichen Anmeldung leitet Oracle Identity Cloud Service den Webbrowser des Benutzers an diese URL um. Diese URL muss mit der URL übereinstimmen, die Sie für die vertrauenswürdige Anwendung in der Oracle Identity Cloud Service -Konsole konfigurieren. |
options["scope"] |
Der Geltungsbereich von OAuth oder OpenID Connect der Authentifizierung. Diese Anwendung erfordert nur die openid -Authentifizierung.
|
state |
Die Webanwendung verwendet diesen Code, um zu prüfen, ob eine Kommunikation mit Oracle Identity Cloud Service aufgebaut werden kann. Der Parameter wird vom OAuth -Protokoll definiert. |
response_type |
Der Wert, der von dem Berechtigungscodeerteilungstyp benötigt wird (Beispiel: code ).
|
Die Funktion callback
verwendet den Autorisierungscode-URL-Parameter, um ein Zugriffstoken anzufordern. Das Zugriffstoken wird als Cookie gespeichert und dann zur zukünftigen Verwendung an den Browser gesendet.
# Definition of the /callback route def callback(request): code = request.GET.get('code') #Authentication Manager loaded with the configurations. am = IdcsClient.AuthenticationManager(getOptions()) #Using the Authentication Manager to exchange the Authorization Code to an Access Token. ar = am.authorizationCode(code) #Get the access token as a variable access_token = ar.getAccessToken() #User Manager loaded with the configurations. um = IdcsClient.UserManager(getOptions()) #Using the access_token value to get an object instance representing the User Profile. u = um.getAuthenticatedUser(access_token) #Getting the user details in json object format. displayname = u.getDisplayName() #The application then adds these information to the User Session. request.session['access_token'] = access_token request.session['displayname'] = displayname #Rendering the home page and adding displayname to be printed in the page. return render(request, 'sampleapp/home.html', {'displayname': displayname})
Die Funktion myProfile
greift auf das Zugriffstoken des Benutzers zu, ruft die Funktion getAuthenticatedUser
auf, um die Benutzerinformationen als JSON-Text abzurufen, und sendet dann die Informationen zur Wiedergabe an myProfile.html
.
# Definition of the /myProfile route def myProfile(request): #Getting the Access Token value from the session access_token = request.session.get('access_token', 'none') if access_token == 'none': #If the access token isn't present redirects to login page. return render(request, 'sampleapp/login.html') else: #If the access token is present, then loads the User Manager with the configurations. am = IdcsClient.UserManager(getOptions()) #Using the access_token value to get an object instance representing the User Profile. u = am.getAuthenticatedUser(access_token) #Getting the user details in json format. jsonProfile = json.dumps(u.getUser()) #Getting User information to send to the My Profile page. displayname = request.session.get('displayname', 'displayname') #Rendering the content of the My Profile Page. return render(request, 'sampleapp/myProfile.html', {'displayname': displayname, 'jsonProfile':jsonProfile})
Um den Benutzer von Single Sign-On zwischen der Anwendung und Oracle Identity Cloud Service abzumelden, implementiert die Python-Webanwendung die Funktion logout
. Diese Funktion invalidiert die Benutzersession und leitet den Benutzer dann zur OAuth -Abmelde-URL von Oracle Identity Cloud Serviceum. Diese URL wird in der Datei config.json
als Parameter logoutSufix
eingerichtet.
# Definition of the /logout route def logout(request): options = getOptions() url = options["BaseUrl"] url += options["logoutSufix"] del request.session['access_token'] del request.session['displayname'] return HttpResponseRedirect(url)