En savoir plus sur l'authentification entre les applications Python et Oracle Identity Cloud Service
Vous êtes prêt à en savoir plus sur l'authentification entre les applications Web Python et Oracle Identity Cloud Service. Cela comprend les éléments suivants :
-
Cas d'utilisation pour l'utilisation d'une trousse SDK avec une application Python pour l'authentification avec Oracle Identity Cloud Service.
-
Flux d'authentification à trois branches pris en charge par Oracle Identity Cloud Service pour la trousse SDK Python
-
Méthodes et fonctions de la trousse SDK Python
En savoir plus sur les flux d'authentification à trois branches
Oracle Identity Cloud Service prend en charge le flux d'authentification à trois branches pour la trousse SDK Python. Dans ce flux, les utilisateurs interagissent directement avec Oracle Identity Cloud Service. Après la connexion d'un utilisateur, Oracle Identity Cloud Service émet un code d'autorisation que la trousse SDK échange pour un jeton d'accès d'utilisateur. Ce jeton d'accès peut être utilisé par l'application Python pour accorder aux utilisateurs l'accès aux ressources protégées dans l'application. Le flux à trois parties utilise le type d'octroi de code d'autorisation.
Pour une sécurité accrue, Oracle recommande d'utiliser des flux à trois branches pour intégrer vos applications Web Python à Oracle Identity Cloud Service pour l'authentification. En utilisant le type d'octroi de code d'autorisation, vous pouvez également accéder à d'autres applications protégées par Oracle Identity Cloud Service sans avoir à vous réauthentifier.
En savoir plus sur les cas d'utilisation principaux pour l'utilisation d'une trousse SDK avec une application Python
L'application Web Python met en oeuvre deux cas d'utilisation : l'un pour authentifier les utilisateurs et l'autre pour accéder à des informations détaillées sur l'utilisateur connecté.
Les diagrammes de flux de données suivants illustrent le flux d'événements, d'appels et de réponses entre le navigateur Web, l'application Web et Oracle Identity Cloud Service pour chaque cas d'utilisation.
Figure - Cas d'utilisation 1 : Authentification de l'utilisateur

Description de "Figure - Cas d'utilisation 1 : Authentification de l'utilisateur"
Le flux de données se déroule de la façon suivante :
-
L'utilisateur demande une ressource protégée.
-
Le module d'authentification utilise la trousse SDK pour générer une URL de code d'autorisation de demande pour Oracle Identity Cloud Service et l'envoyer en tant que réponse de redirection au navigateur Web.
-
Le navigateur Web appelle l'URL.
-
La page de connexion à Oracle Identity Cloud Service s'affiche.
-
L'utilisateur soumet ses données d'identification de connexion à Oracle Identity Cloud Service.
-
Une fois l'utilisateur connecté, Oracle Identity Cloud Service crée une session pour l'utilisateur et émet un code d'autorisation.
-
L'application Web effectue un appel dorsal (ou serveur à serveur) pour échanger le code d'autorisation contre un jeton d'accès utilisateur.
-
Oracle Identity Cloud Service émet un jeton d'accès et un jeton d'ID.
-
Une session est établie et l'utilisateur est redirigé vers la page d'accueil.
-
La page d'accueil de l'application Web s'affiche.
Figure - Cas d'utilisation 2 : Obtenir les détails de l'utilisateur

Description de "Figure - Cas d'utilisation 2 : Obtenir les détails de l'utilisateur"
Le flux de données se déroule de la façon suivante :
-
L'utilisateur demande la ressource
/myProfile
. -
L'application Web utilise la trousse SDK d'Oracle Identity Cloud Service pour valider le jeton d'ID.
-
Les données retournées à partir de la validation du jeton d'ID contiennent les détails de l'utilisateur dans le format d'un objet JSON.
-
La page Mon profil affiche l'objet JSON en tant que contenu HTML.
En savoir plus sur les méthodes et les fonctions de la trousse SDK Python
La trousse SDK Python est disponible en tant que deux fichiers python, IdcsClient.py
et Constants.py
, que vous devez inclure dans votre application Web.
Ces fichiers python dépendent de bibliothèques tierces qui doivent également être incluses dans votre application. Pour les inclure, ouvrez le fichier zip de la trousse SDK, extrayez les fichiers README.txt
et requirements.txt
dans un dossier temporaire et exécutez la commande pip install -r requirements.txt
.
Un exemple d'application Web a été développé à l'aide du cadre Python DJango, qui met en oeuvre des routes d'URL sous forme de fonctions.
La trousse SDK Python nécessite une variable JSON chargée avec les informations de connexion à Oracle Identity Cloud Service. L'application Web Python utilise un fichier config.json
qui fournit les informations suivantes.
{ "ClientId" : "123456789abcdefghij", "ClientSecret" : "abcde-12345-zyxvu-98765-qwerty", "BaseUrl" : "https://idcs-abcd1234.identity.oraclecloud.com", "AudienceServiceUrl" : "https://idcs-abcd1234.identity.oraclecloud.com", "scope" : "urn:opc:idm:t.user.me openid", "TokenIssuer" : "https://identity.oraclecloud.com/", "redirectURL": "http://localhost:8000/callback", "logoutSufix":"/oauth2/v1/userlogout", "LogLevel":"INFO", "ConsoleLog":"True" }
Vous trouverez ci-dessous une brève explication de chaque attribut requis pour cette trousse SDK :
Tableau - Attributs requis pour la trousse SDK Python
Nom d'attribut | Description de l'attribut |
---|---|
ClientId |
Valeur de l'ID client généré après l'enregistrement de l'application Web à l'aide de la console Oracle Identity Cloud Service. |
ClientSecret |
Valeur de la clé secrète client générée après l'enregistrement de l'application Web à l'aide de la console Oracle Identity Cloud Service. |
BaseUrl |
URL de domaine de votre instance Oracle Identity Cloud Service. |
AdminServiceUrl |
URL du nom de domaine de votre instance Oracle Identity Cloud Service. C'est généralement la même chose que BaseUrl .
|
TokenIssuer |
Conservez la valeur telle qu'elle est présentée ici. |
scope |
La portée contrôle les données auxquelles l'application peut accéder ou traiter au nom de l'utilisateur. Comme l'application utilise la trousse SDK pour l'authentification, la portée est openid . L'application met également en oeuvre le cas d'utilisation get user details , pour lequel vous devez également utiliser la portée urn:opc:idm:t.user.me .
|
ConsoleLog |
Active le journal de la trousse SDK. |
LogLevel |
Indique le niveau de journal de la trousse SDK. |
Les attributs logoutSufix
et redirectURL
sont tous deux utilisés par l'application. Par conséquent, ils ne sont pas requis par le SDK.
L'application met en oeuvre la définition de fonction auth
, qui mappe l'URL /auth
. Lorsqu'un utilisateur s'authentifie auprès d'Oracle Identity Cloud Service, le navigateur envoie une demande à cette URL.
La fonction auth
initialise le gestionnaire d'authentification, utilise les attributs de configuration JSON en tant que paramètres, utilise la trousse SDK pour générer l'URL du code d'autorisation Oracle Identity Cloud Service, puis redirige le navigateur vers cette URL.
#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() print "config.json file = %s" % options #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)
Les paramètres suivants sont utilisés pour générer l'URL du code d'autorisation :
Table - Paramètres utilisés pour générer l'URL du code d'autorisation
Nom du paramètre | Description du paramètre |
---|---|
options["redirectURL"] |
Une fois la connexion établie, Oracle Identity Cloud Service redirige le navigateur Web de l'utilisateur vers cette URL. Cette URL doit correspondre à celle que vous allez configurer pour l'application approuvée dans la console Oracle Identity Cloud Service. |
options["scope"] |
Portée d'authentification OAuth ou OpenID Connect. Cette application nécessite uniquement l'authentification openid .
|
state |
L'application Web utilise ce code pour vérifier si la communication peut être établie avec Oracle Identity Cloud Service. Le paramètre est défini par le protocole OAuth. |
response_type |
Valeur requise par le type d'octroi de code d'autorisation (par exemple, code ).
|
La fonction callback
utilise le paramètre d'URL de code d'autorisation pour demander un jeton d'accès et un jeton d'ID. Les deux jetons sont stockés dans la session utilisateur pour une utilisation future.
# 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() id_token = ar.getIdToken() #Validating id token to acquire information such as UserID, DisplayName, list of groups #and AppRoles assigned to the user id_token_verified = am.verifyIdToken(id_token) displayname = id_token_verified.getDisplayName() #The application then adds these information to the User Session. request.session['access_token'] = access_token request.session['id_token'] = id_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})
La fonction myProfile
accède au jeton d'ID utilisateur, appelle la fonction AuthenticationManager
verifyIdToken
pour extraire les informations de l'utilisateur telles que le nom, les groupes et les applications affectés à l'utilisateur, en tant que texte JSON, puis envoie les informations à myProfile.html
pour le rendu.
# 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, validates the id token to acquire #information such as UserID, DisplayName, list of groups and AppRoles assigned to the user. #Authentication Manager loaded with the configurations. am = IdcsClient.AuthenticationManager(getOptions()) id_token = request.session.get('id_token', 'none') id_token_verified = am.verifyIdToken(id_token) #Getting the user details in json format. jsonProfile = id_token_verified.getIdToken() #Getting User information to send to the My Profile page. displayname = request.session.get('displayname', 'displayname') #Redenring json to be used in the html page. json_pretty = json.dumps(jsonProfile, sort_keys=True, indent=2) context = { 'displayname': displayname, "json_pretty": json_pretty, } #Rendering the content of the My Profile Page. return render(request, 'sampleapp/myProfile.html', context)
Pour déconnecter l'utilisateur de l'authentification unique entre l'application et Oracle Identity Cloud Service, l'application Web Python met en oeuvre la fonction logout
. Cette fonction efface les attributs de session d'utilisateur définis précédemment, puis redirige l'utilisateur vers l'URL de déconnexion d'Oracle Identity Cloud Service OAuth. Cette URL est configurée dans le fichier config.json
en tant que paramètre logoutSufix
.
# Definition of the /logout route def logout(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: options = getOptions() url = options["BaseUrl"] url += options["logoutSufix"] url += '?post_logout_redirect_uri=http%3A//localhost%3A8000&id_token_hint=' url += request.session.get('id_token', 'none') #Clear session attributes del request.session['access_token'] del request.session['id_token'] del request.session['displayname'] #Redirect to Oracle Identity Cloud Service logout URL. return HttpResponseRedirect(url)