Examiner l'application Python et la trousse SDK

Dans cette section de la solution, vous allez :

  • Examiner le comportement et le code de l'application Web Python

  • Vérifier les données de diagnostic associées aux tentatives de connexion réussies et infructueuses que l'application Web Python lance dans Oracle Identity Cloud Service

Examiner le comportement de l'application Python

Le comportement de l'application Web Python suit le flux d'authentification à trois branches défini par le type d'octroi de code d'autorisation.

Pour vérifier toutes les demandes, réponses et redirections effectuées par l'application et Oracle Identity Cloud Service à l'aide du navigateur Web, activez le mode Développeur pour votre navigateur. Cette solution utilise Google Chrome.

  1. Exécutez l'application Web Python.
  2. Ouvrez un navigateur Web Google Chrome, accédez à l'URL http://localhost:8080 et cliquez sur Connexion.
  3. Appuyez sur F12, sélectionnez l'onglet Réseau et cochez la case Conserver le journal. Cochez cette case pour voir toutes les communications entre l'application et Oracle Identity Cloud Service.
  4. Dans la page Connexion, cliquez sur l'icône rouge Oracle.

Le journal du développeur du navigateur doit afficher le flux d'événements suivant :

  1. L'utilisateur demande la ressource /auth/oracle et le navigateur Web reçoit une réponse de redirection de l'application Web Python.
    Request URL: http://localhost:8000/auth/
    Request Method: GET
    Status Code: 302 Found
    
    Response Headers
    Location: https://idcs-1234.identity.domain.com/oauth2/v1/authorize?client_id=123456789abcdefghij&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fcallback&response_type=code&scope=urn:opc:idm:t.user.me+openid&state=1234
  2. Oracle Identity Cloud Service reçoit la demande de code d'autorisation et présente la page Connexion.
    Request URL: https://idcs-1234.identity.domain.com/oauth2/v1/authorize?client_id=123456789abcdefghij&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fcallback&response_type=code&scope=urn:opc:idm:t.user.me+openid&state=1234
    Request Method: GET
    Status Code: 303 See Other
     
    Response Headers
    Location:
    https://idcs-1234.identity.domain.com/ui/v1/signin
    Set-cookie: ORA_OCIS_REQ_1=[value has been omitted for readability]
  3. L'utilisateur se connecte à Oracle Identity Cloud Service. Oracle Identity Cloud Service redirige le navigateur Web vers l'URL de rappel de l'application Web Python.
    Request URL:
    http://localhost:8000/callback/&code=[value has been omitted for readability]&state=1234
    Request Method: GET
    Status Code: 200 OK
     
    Response Headers
    Set-Cookie: sessionid=[value has been omitted for readability]

    Dans cet exemple, l'URL de rappel redirige le navigateur Web vers la page d'accueil avec le jeton d'accès utilisateur défini en tant qu'attribut de session.

Examiner l'application et les journaux SDK

L'application enregistre les informations dans la fenêtre de ligne de commande. Vous pouvez également activer les journaux de trousse SDK.

Par défaut, l'exemple d'application enregistre les informations du flux d'authentification dans la fenêtre de ligne de commande.
Starting development server at http://127.0.0.1:8000/
----------------------------------------
[21/Dec/2018 16:00:42] "GET /login/ HTTP/1.1" 200 2772
...
----------------- def auth(request) ---------------
config.json file = {'logoutSufix': '/oauth2/v1/userlogout', 'ClientSecret': 'abcde-12345-zyxvu-98765-qwerty', 'AudienceServiceUrl': 'https://idcs-abcd1234.identity.domain.com', 'BaseUrl': 'https://idcs-abcd1234.identity.domain.com', 'ClientId': '123456789abcdefghij, 'ConsoleLog': 'True', 'LogLevel': 'INFO', 'scope': 'urn:opc:idm:t.user.me openid', 'redirectURL': 'http://localhost:8000/callback', 'TokenIssuer': 'https://identity.domain.com/'}
[21/Dec/2018 16:00:48] "GET /auth/ HTTP/1.1" 302 0
[21/Dec/2018 16:01:08] "GET /callback?code=[value has been omitted for readability]&state=1234 HTTP/1.1" 301 0
----------------- def callback(request) ------------------
access_token = [value has been omitted for readability]

Suivez les étapes ci-dessous pour activer le journal de la trousse SDK Python pour Oracle Identity Cloud Service et examiner tout problème détecté lors du développement.
  1. Ouvrez le fichier config.json et remplacez la valeur de LogLevel par DEBUG.
  2. Enregistrer le fichier et redémarrer le serveur Python

Vérifier les données de diagnostic

Lorsque l'application Web Python tente de se connecter à Oracle Identity Cloud Service, les tentatives réussies et infructueuses sont enregistrées dans les fichiers journaux de diagnostic d'Oracle Identity Cloud Service.

  1. Connectez-vous à la console Oracle Identity Cloud Service.
  2. Dans la console, développez le tiroir de navigation, cliquez sur Paramètres, puis sur Diagnostics.
  3. Sélectionnez Vue d'activité comme type de diagnostic, puis cliquez sur Enregistrer.
  4. Déconnectez-vous d'Oracle Identity Cloud Service.

Oracle Identity Cloud Service saisit les données de diagnostic pour les 15 prochaines minutes.

  1. Effectuez les étapes de la rubrique Exécuter l'application Python de cette solution pour afficher la page Connexion de l'application Web Python.
  2. Cliquez sur l'icône rouge Oracle.
  3. Pour tenter une tentative d'échec de connexion, entrez un nom d'utilisateur ou un mot de passe incorrect dans la page Connexion d'Oracle Identity Cloud Service.
  4. Pour vous connecter, entrez votre nom d'utilisateur et votre mot de passe corrects.
  5. Utilisez l'application Web Python pour vous déconnecter d'Oracle Identity Cloud Service.
  6. Connectez-vous à la console Oracle Identity Cloud Service.
  7. Dans la console, développez le tiroir de navigation, cliquez sur Rapports, puis sur Diagnostic des données.
  8. Sélectionnez un intervalle de temps de 15 minutes, le type de journal Vue d'activité, le format de rapport CSV, puis cliquez sur Télécharger le rapport.

Le fichier journal de diagnostic contient des informations similaires aux suivantes sur les tentatives de connexion à Oracle Identity Cloud Service.

Message: ID Token will be signed with User Tenant:idcs-abcd1234 Resource Tenant:idcs-abcd1234, clientId=123456789abcdefghij
Component: OAuth
Timestamp: [Date]
Actor ID: your.email@domain.com
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: {"request":{"tenant":"idcs-abcd1234","grant types":"authorization_code","scopes":["urn:opc:idm:t.user.me"]},"user":{"id":"111111","name":"your.email@domain.com","tenant":"idcs-abcd1234","auth-type":"PASSWORD"},"client":{"id":"123456789abcdefghij","name":"Sample App","tenant":"idcs-abcd1234","auth-type":"PASSWORD"},"environment":{"isCSR":"false","onBehalfOfUser":"false"},"response":{"result":"ALLOWED","scopes":["urn:opc:idm:t.user.me"],"custom-claims":{"clientAppRoles":["Authenticated Client","Me"],"userAppRoles":["Authenticated","Global Viewer","Identity Domain Administrator"],"user_isAdmin":"true"}}}
Component: Authorization/getAllowedScopes
Timestamp: [Date]
Actor ID: your.email@domain.com
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: {"Message":"SSO SignOn Policy evaluation result for user : 11111  is : effect:ALLOW,authenticationFactor:IDP,allowUserToSkip2FAEnrolment:false,2FAFrequency:SESSION,reAuthenticate:false,trustedDevice2FAFrequency:
Component:
Timestamp:
Actor ID:
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: [PolicyEngineUtil.evaluatePolicy] Evaluating Default Sign-On Policy
Component: PolicyEngine
Timestamp: [Date]
Actor ID: uiSignin
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: [PolicyEngineUtil.evaluateRule] Evaluating MFA rule
Component: PolicyEngine
Timestamp: [Date]
Actor ID: uiSignin
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: [PolicyEngineUtil.evaluatePolicy] Evaluating Default Authentication Target App Policy
Component: PolicyEngine
Timestamp: [Date]
Actor ID: idcssso
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: {"password":"********","authFactor":"USERNAME_PASSWORD","device":"{\"currentTime\":\"[date]",\"screenWidth\":1920,\"screenHeight\":1080,\"screenColorDepth\":24,\"screenPixelDepth\":24,\"windowPixelRatio\":1,\"language\":\"en\",\"userAgent\":\"Mozilla\/5.0 (Windows NT 10.0
Component:
Timestamp:
Actor ID:
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: {"Message":"No session found so need to collect credentials","Redirecting to Login URL: ":https://idcs-abcd1234.identity.oraclecloud.com/ui/v1/signin}
Component: SSO
Timestamp: [Date]
Actor ID: Unauthenticated
---------------------------------------------------------------
...
---------------------------------------------------------------
 
Message: [PolicyEngineUtil.evaluatePolicy] Evaluating Default Identity Provider Policy
Component: PolicyEngine
Timestamp: [Date]
Actor ID: Unauthenticated
---------------------------------------------------------------
Message: Authorization Request, received parameters: scope[urn:opc:idm:t.user.me openid] response_type[code] state[1234] redirect_uri[http://localhost:8000/callback] client_id[123456789abcdefghij]
Component: OAuth
Timestamp: [Date]
Actor ID: Unauthenticated

Les journaux les plus récents apparaissent en haut du fichier.