Examiner l'application et le kit SDK Node.js

Dans cette section de la solution, vous pouvez :

  • Examiner le comportement et le code de l'application Web Node.js

  • Vérifiez les données de diagnostic associées aux tentatives de connexion réussies et en échec que l'application Web Node.js commence à Oracle Identity Cloud Service

Examiner le comportement de l'application Node.js

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

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

  1. Exécutez l'application Web Node.js.
  2. Ouvrez un navigateur Web Google Chrome, accédez à l'URL http://localhost:3000 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. Sur la page de connexion, cliquez sur l'icône Oracle rouge qui apparaît à droite ou vous pouvez vous connecter.

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

  1. Vous demandez la ressource /auth/oracle et votre navigateur Web reçoit une réponse de redirection de l'application Web Node.js.

    Request URL: http://localhost:3000/auth/oracle
    Request Method: GET
    Status Code: 302 Found
     
    Response Headers
    Location: https://idcs-1234.identity.oraclecloud.com/oauth2/v1/authorize?client_id=123456789abcdefghij&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fcallback&response_type=code&scope=openid&state=1234
  2. Oracle Identity Cloud Service reçoit votre demande de code d'autorisation et présente la page Connexion.

    Request URL: https://idcs-1234.identity.oraclecloud.com/oauth2/v1/authorize?client_id=123456789abcdefghij&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fcallback&response_type=code&scope=openid&state=1234Request Method: GET
    Status Code: 303 See Other
     
    Response Headers
    Location:
    https://idcs-abcd1234.identity.oraclecloud.com/ui/v1/signin
    Set-cookie: ORA_OCIS_REQ_1=[value has been omitted for readability]
  3. Vous vous connectez à Oracle Identity Cloud Service. Oracle Identity Cloud Service réachemine le navigateur Web vers l'URL de callback de l'application Web Node.js.

    Request URL:
    http://localhost:3000/callback?code=[value has been omitted for readability]&state=1234
    Request Method: GET
    Status Code: 302 Found
     
    Response Hearders
    Location: /auth.html
    Set-Cookie: idcs_user_assertion=[value has been omitted for readability]

Dans cet exemple, l'URL de callback redirige votre navigateur Web vers la page /auth.html avec le jeton d'accès utilisateur défini en tant que cookie.

A ce stade, l'application vous authentifie localement à l'aide de la méthode passport.authenticate(), puis transmet votre demande à l'acheminement /home.

Request URL: http://localhost:3000/home
Request Method: GET
Status Code: 200 OK
 
Response Headers
Cookie:
connect.sid=[value has been omitted for readability]

Examiner le code de l'application Node.js

Une fois que vous êtes connecté à Oracle Identity Cloud Service et réacheminé vers l'URL de callback de l'application Web Node.js, l'application Web Node.js consigne les informations dans la fenêtre de ligne de commande.

req.user={"name":"your.email@domain.com","displayName":"Your Name","id":"111111111111","tenant":"idcs-abcd1234","groups":[{"name":"Group 1","id":"2222222222222","location":"https://idcs-abcd1234.identity.oraclecloud.com/admin/v1/Groups/7787fbab31b34e08b39cdeedf1f4233a"}],"appRoles":[{"name":"Identity Domain Administrator","id":"333333333333333","location":"https://idcs-abcd1234.identity.oraclecloud.com/admin/v1/AppRoles/444444444444444","appName":"SampleApp","appID":"SampleAppId"}],"client":{"client_name":"Sample Apps","client_id":"555555555555","client_tenantname":"idcs-abcd1234","scope":"openid","audience":"https://idcs-abcd1234.identity.oraclecloud.com"}}

La méthode ensureAuthenticated() journalise des informations sur l'objet JSON qui vous représente, qui sont connecté à Oracle Identity Cloud Service.

ensureAuthenticated req.user={"name":"your.email@domain.com","displayName":"Your Name","id":"111111111111","tenant":"idcs-abcd1234","groups":[{"name":"Group 1","id":"2222222222222","location":"https://idcs-abcd1234.identity.oraclecloud.com/admin/v1/Groups/7787fbab31b34e08b39cdeedf1f4233a"}],"appRoles":[{"name":"Identity Domain Administrator","id":"333333333333333","location":"https://idcs-abcd1234.identity.oraclecloud.com/admin/v1/AppRoles/444444444444444","appName":"SampleApp","appID":"SampleAppId"}],"client":{"client_name":"Sample Apps","client_id":"555555555555","client_tenantname":"idcs-abcd1234","scope":"openid","audience":"https://idcs-abcd1234.identity.oraclecloud.com"}}

Vérifier les données de diagnostic

Les tentatives de connexion réussies et en échec que l'application Web Node.js lance à Oracle Identity Cloud Service sont enregistrées dans les fichiers journaux de diagnostic de Oracle Identity Cloud Service.

  1. Connectez-vous à Oracle Identity Cloud Service.
  2. Dans la console Identity Cloud Service, développez le volet 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 de Oracle Identity Cloud Service.

Oracle Identity Cloud Service capture les données de diagnostic des 15 prochaines minutes.

  1. Suivez les étapes de la rubrique Exécuter l'application Node.js de cette solution pour afficher la page de connexion de l'application Web Node.js.

  2. Cliquez sur l'icône Oracle rouge, qui apparaît à droite de ou vous pouvez vous connecter avec.

  3. Pour faire d'une tentative de connexion ayant échoué, entrez un nom d'utilisateur ou un mot de passe incorrect dans la page de connexion Oracle Identity Cloud Service.

  4. Pour vous connecter, entrez vos nom d'utilisateur et mot de passe corrects.

  5. Utilisez l'application Web Node.js pour vous déconnecter de Oracle Identity Cloud Service.

  6. Reconnectez-vous à Oracle Identity Cloud Service.

  7. Dans la console Identity Cloud Service, développez le volet de navigation, cliquez sur Rapports, puis sur Données de diagnostic.

  8. Sélectionnez 15-Minute pour la période, Vue d'activité pour le type de journal et CSV pour le format du rapport, puis cliquez sur Télécharger le rapport.

Le fichier journal de diagnostic contient des informations telles que les suivantes sur l'utilisateur qui se connecte à 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@example.com
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: {"request":{"tenant":"idcs-abcd1234","grant types":"authorization_code","scopes":["urn:opc:idm:t.user.me"]},"user":{"id":"111111","name":"your.email@example.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@example.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:3000/callback] client_id[123456789abcdefghij]
Component: OAuth
Timestamp: [Date]
Actor ID: Unauthenticated

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