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 - Anwendungsfall 1: Benutzerauthentifizierung"

Der Datenfluss wird wie folgt ausgeführt:

  1. Der Benutzer benötigt eine geschützte Ressource.

  2. 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.

  3. Der Webbrowser ruft die URL auf.

  4. Die Anmeldeseite für Oracle Identity Cloud Service wird angezeigt.

  5. Der Benutzer leitet seine Zugangsdaten für die Oracle Identity Cloud Service -Anmeldung weiter.

  6. Nachdem sich der Benutzer erfolgreich angemeldet hat, erstellt Oracle Identity Cloud Service eine Session für den Benutzer und gibt einen Autorisierungscode aus.

  7. Die Webanwendung erstellt einen Backend- (oder Server-zu-Server-) Aufruf zum Austausch des Autorisierungscodes für ein Benutzerzugriffstoken.

  8. Oracle Identity Cloud Service gibt das Zugriffstoken aus.

  9. Eine Session wird hergestellt, und der Benutzer wird auf die Homepage umgeleitet.

  10. Die Homepage der Webanwendung wird angezeigt.

Abbildung - Anwendungsfall 2: Benutzerdetails abrufen

Beschreibung von Abbildung - folgt
Beschreibung von "Abbildung - Anwendungsfall 2: Benutzerdetails abrufen"

Der Datenfluss wird wie folgt ausgeführt:

  1. Der Benutzer fordert die /myProfile -Ressource an.

  2. Die Webanwendung ruft Oracle Identity Cloud Service mit dem SDK auf, das das Zugriffstoken verwendet, das in der Benutzersession als Parameter gespeichert ist.

  3. Die Benutzerdetails werden als JSON-Objekt an die Webanwendung gesendet.

  4. 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)