En savoir plus sur l'authentification entre les applications Python et Oracle Identity Cloud Service
Vous êtes prêt à vous familiariser avec l'authentification entre les applications Web Python et Oracle Identity Cloud Service. Cela comprend les différences suivantes :
-
Utilisez des cas pour utiliser un SDK avec une application Python afin de s'authentifier auprès de Oracle Identity Cloud Service.
-
Flux d'authentification à trois facteurs pris en charge par Oracle Identity Cloud Service pour le SDK Python
-
Méthodes et fonctions du SDK Python
En savoir plus sur les flux d'authentification 3D
Oracle Identity Cloud Service prend en charge le flux d'authentification à trois segments pour le 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 le SDK échange pour un jeton d'accès utilisateur. Ce jeton d'accès peut être utilisé par l'application Python pour accorder aux utilisateurs un accès aux ressources protégées de l'application. Le flux à trois facteurs utilise le type d'octroi de code d'autorisation.
Pour une sécurité accrue, Oracle recommande d'utiliser des flux à trois facteurs afin d'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 authentifier à nouveau.
En savoir plus sur les cas d'emploi principaux pour l'utilisation d'un kit SDK avec une application Python
L'application Web Python implémente deux cas d'emploi : l'un pour authentifier les utilisateurs et l'autre pour accéder aux 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'emploi.
Figure : Cas d'emploi 1 : authentification utilisateur
![Description de la figure - Description de la figure -](img/authenticate-user.png)
Description de l'image Cas d'emploi 1 : authentification utilisateur
Le flux de données se produit de la façon suivante :
-
L'utilisateur demande une ressource protégée.
-
Le module d'authentification utilise le kit SDK pour générer une URL request-authorization-code pour Oracle Identity Cloud Service et envoyer cette URL en tant que réponse de réacheminement au navigateur Web.
-
Le navigateur Web appelle l'URL.
-
La page Connexion à Oracle Identity Cloud Service apparaît.
-
L'utilisateur soumet ses informations d'identification de connexion à Oracle Identity Cloud Service.
-
Une fois l'utilisateur connecté, Oracle Identity Cloud Service crée une session pour lui et émet un code d'autorisation.
-
L'application Web effectue un appel back-end (ou de serveur à serveur) pour échanger le code d'autorisation d'un jeton d'accès utilisateur.
-
Oracle Identity Cloud Service émet le jeton d'accès.
-
Une session est établie et l'utilisateur est redirigé vers la page d'accueil.
-
La page d'accueil de l'application Web apparaît.
Figure : Cas d'emploi 2 : obtenir les détails utilisateur
![Description de la figure - Description de la figure -](img/get-details-user.png)
Description de l'image - Cas d'emploi 2 : obtenir les détails utilisateur
Le flux de données se produit de la façon suivante :
-
L'utilisateur demande la ressource
/myProfile
. -
L'application Web appelle Oracle Identity Cloud Service à l'aide du kit SDK, qui utilise le jeton d'accès stocké dans la session utilisateur comme paramètre.
-
Les détails de l'utilisateur sont envoyés à l'application Web en tant qu'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 du SDK Python
Le SDK Python est disponible sous la forme de 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, exécutez les commandes pip install
suivantes :
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
Cette application Web échantillon a été développée à l'aide de la structure Python DJango, qui implémente des acheminements d'URL sous forme de fonctions.
Le SDK Python requiert 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.
//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" }
Voici une brève explication de chaque attribut obligatoire pour ce SDK :
Tableau - Attributs obligatoires pour le SDK Python
Nom d'attribut | Description de l'attribut |
---|---|
ClientId |
Valeur de l'ID client généré après inscription 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 de nom de domaine de votre instance Oracle Identity Cloud Service. Généralement identique à BaseUrl .
|
TokenIssuer |
Conservez la valeur comme indiqué ici. |
scope |
La portée contrôle les données auxquelles l'application peut accéder ou traiter pour le compte de l'utilisateur. Comme l'application utilise le kit SDK pour l'authentification, la portée est openid . L'application implémente également le cas d'emploi get user details , pour lequel vous devez également utiliser la portée urn:opc:idm:t.user.me .
|
Les attributs logoutSufix
et redirectURL
sont utilisés par l'application. Par conséquent, ils ne sont pas requis par le kit SDK.
L'application implémente la définition de fonction auth
, qui met en correspondance l'URL /auth
. Lorsqu'un utilisateur s'authentifie auprès de 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 comme paramètres, utilise le kit 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() #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 permettent de générer l'URL de code d'autorisation :
Tableau - Paramètres utilisés pour générer l'URL de code d'autorisation
Nom de 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 configurerez pour l'application sécurisée dans la console Oracle Identity Cloud Service. |
options["scope"] |
Portée d'authentification de OAuth ou de OpenID. Cette application requiert 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. Ce 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. Le jeton d'accès est stocké en tant que cookie, qui est ensuite envoyé au navigateur pour une utilisation ultérieure.
# 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})
La fonction myProfile
accède au jeton d'accès de l'utilisateur, appelle la fonction getAuthenticatedUser
pour extraire les informations de l'utilisateur sous forme de texte JSON, puis envoie les informations à myProfile.html
pour affichage.
# 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})
Pour déconnecter l'utilisateur d'un accès avec connexion unique (SSO) entre l'application et Oracle Identity Cloud Service, l'application Web Python implémente la fonction logout
. Cette fonction invalide la session utilisateur, puis redirige l'utilisateur vers l'URL de déconnexion OAuth de Oracle Identity Cloud Service. Cette URL est configurée dans le fichier config.json
en tant que paramètre logoutSufix
.
# 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)