Node.js-Anwendung und SDK untersuchen

In diesem Abschnitt der Lösung gehen Sie wie folgt vor:

  • Verhalten und Code der Node.js-Webanwendung untersuchen

  • Prüfen Sie Diagnosedaten, die mit erfolgreichen und nicht erfolgreichen Anmeldeversuchen verknüpft sind, die von der Node.js-Webanwendung in Oracle Identity Cloud Service initiiert werden

Verhalten der Node.js-Anwendung untersuchen

Das Verhalten der Node.js-Webanwendung folgt dem dreibeinigen Authentifizierungsablauf, der vom Autorisierungscodezugriffsberechtigungstyp definiert wird.

Um alle Anforderungen, Antworten und Umleitungen zu prüfen, die von der Anwendung und Oracle Identity Cloud Service mit dem Webbrowser ausgeführt werden, aktivieren Sie den Entwicklermodus Ihres Browsers. Diese Lösung verwendet Google Chrome.

  1. Führen Sie die Webanwendung Node.js aus.
  2. Öffnen Sie einen Google Chrome-Webbrowser, rufen Sie die URL http://localhost:3000 auf, und klicken Sie auf Anmelden.
  3. Drücken Sie F12, wählen Sie die Registerkarte "Netzwerk" aus, und aktivieren Sie das Kontrollkästchen Log beibehalten.
    Aktivieren Sie dieses Kontrollkästchen, um die gesamte Kommunikation zwischen der Anwendung und Oracle Identity Cloud Service anzuzeigen.
  4. Klicken Sie auf der Seite Anmeldung auf das rote Oracle-Symbol rechts neben oder Sie können sich anmelden.

Das Entwicklerprotokoll des Browsers sollte den folgenden Ereignisfluss anzeigen:

  1. Sie fordern die Ressource /auth/oracle an, und Ihr Webbrowser empfängt eine Umleitungsantwort von der Webanwendung Node.js.

    Request URL: http://localhost:3000/auth/oracle
    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%3A3000%2Fcallback&response_type=code&scope=openid&state=1234
  2. Oracle Identity Cloud Service erhält Ihre Autorisierungscodeanforderung und zeigt die Seite Anmelden an.

    Request URL: https://idcs-1234.identity.domain.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.domain.com/ui/v1/signin
    Set-cookie: ORA_OCIS_REQ_1=[value has been omitted for readability]
  3. Sie melden sich bei Oracle Identity Cloud Service an. Oracle Identity Cloud Service leitet den Webbrowser zur Callback-URL der Node.js-Webanwendung um.

    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]

In diesem Beispiel leitet die Callback-URL Ihren Webbrowser zur Seite /auth.html um, wobei das Zugriffstoken als Cookie festgelegt ist.

An dieser Stelle authentifiziert die Anwendung Sie lokal mit der Methode passport.authenticate() und leitet Ihre Anforderung dann an die Route /home weiter.

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

Anwendungs- und SDK-Logs prüfen

Die Anwendung protokolliert Informationen im Befehlszeilenfenster. Sie können auch die SDK-Logs aktivieren.

Standardmäßig protokolliert die Beispielanwendung Informationen zum Authentifizierungsfluss im Befehlszeilenfenster.
Using ClientId=123456789abcdefghij
Server started on port 3000

---Resource: /auth/oracle -- Logging in ----------------------------------

authZurl=https://idcs-abcd1234.identity.domain.com/oauth2/v1/authorize?client_id=123456789abcdefghij&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fcallback&response_type=code&scope=urn%3Aopc%3Aidm%3At.user.me%20openid&state=1234

---Resource: /callback -- Exchanging authzcode for a token ---------------------

authZcode=[value has been omitted for readability]
result.access_token = [value has been omitted for readability]
result.id_token = [value has been omitted for readability]

---Resource: /auth -- passport.authenticate ---------------------

---function ensureAuthenticated() -- Validating user logged in ---------------------
req.user=[The JSON object as String - value has been omitted for readability]

---Resource: /home -- Rendering home ---------------------
Führen Sie die folgenden Schritte aus, um die Node.js-SDK-Anmeldung von Oracle Identity Cloud Service zu aktivieren und alle Probleme zu untersuchen, die Sie während der Entwicklung finden.
  1. Öffnen Sie die Datei auth.js, und ersetzen Sie den Wert von LogLevel je nach Bedarf in debug oder trace.
  2. Speichern Sie die Datei, und starten Sie den Node.js-Server neu.

Diagnosedaten prüfen

Sowohl erfolgreiche als auch nicht erfolgreiche Anmeldeversuche, die von der Node.js-Webanwendung in Oracle Identity Cloud Service initiiert werden, werden in den Diagnoselogdateien von Oracle Identity Cloud Service registriert.

  1. Melden Sie sich bei der Oracle Identity Cloud Service-Konsole an.
  2. Blenden Sie in der Konsole das Navigations-Drawer ein, klicken Sie auf Einstellungen, Diagnose.
  3. Wählen Sie als Diagnosetyp Aktivitätsansicht aus, und klicken Sie auf Speichern.
  4. Melden Sie sich von Oracle Identity Cloud Service ab.

Oracle Identity Cloud Service erfasst Diagnosedaten für die nächsten 15 Minuten.

  1. Führen Sie die Schritte im Thema "Anwendung Node.js ausführen" dieser Lösung aus, um die Seite Anmelden der Webanwendung Node.js anzuzeigen.

  2. Klicken Sie auf das rote Oracle-Symbol.

  3. Um einen nicht erfolgreichen Anmeldeversuch auszuführen, geben Sie auf der Oracle Identity Cloud Service-Anmeldeseite einen falschen Benutzernamen oder ein falsches Kennwort ein.

  4. Um sich erfolgreich anzumelden, geben Sie Ihren richtigen Benutzernamen und Ihr Kennwort ein.

  5. Melden Sie sich mit der Node.js-Webanwendung bei Oracle Identity Cloud Service ab.

  6. Melden Sie sich erneut bei der Oracle Identity Cloud Service-Konsole an.

  7. Blenden Sie in der Oracle Identity Cloud Service-Konsole das Drawer für die Navigation ein, klicken Sie auf Berichte, und klicken Sie auf Diagnosedaten.

  8. Wählen Sie 15 Minuten für den Zeitraum, Aktivitätsansicht für den Logtyp und CSV für das Berichtsformat, und klicken Sie auf Bericht herunterladen.

Die Diagnoselogdatei enthält Informationen wie die folgenden zum Benutzer, der sich bei Oracle Identity Cloud Service anmeldet.

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

Die neuesten Logs werden oben in der Datei angezeigt.