Examinar o Node.js Application e o SDK

Nesta seção da solução, você:

  • Examine o comportamento e o código da aplicação Web Node.js

  • Verificar dados de diagnóstico associados a tentativas de log-in bem-sucedidas e malsucedidas que o aplicativo Node.js Web inicia para o Oracle Identity Cloud Service

Examinar o Comportamento do Aplicativo Node.js

O comportamento da aplicação Web do Node.js segue o fluxo de autenticação três trechos definido pelo tipo de concessão de código de autorização.

Para verificar todas as solicitações, respostas e redireciona que a aplicação e o Oracle Identity Cloud Service executam usando o Web browser, ative o modo Desenvolvedor do seu browser. Essa solução usa o Google Chrome.

  1. Execute a aplicação Node.js Web.
  2. Abra um navegador da Web Google Chrome, acesse o URL do http://localhost:3000 e clique em Fazer Logon .
  3. Pressione F12, selecione a guia Rede e marque a caixa de seleção Preservar log .
    Marque esta caixa de seleção para ver toda a comunicação entre o aplicativo e o Oracle Identity Cloud Service.
  4. Na página Log-In , clique no ícone vermelho Oracle, que é exibido à direita ou Você pode efetuar log-In com .

O log do desenvolvedor do browser deve mostrar o seguinte fluxo de eventos:

  1. Você solicita o recurso /auth/oracle e seu web browser recebe uma resposta de redirecionamento do aplicativo Node.js Web.

    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. O Oracle Identity Cloud Service recebe sua solicitação de código de autorização e apresenta a página Efetuar Sign-In .

    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. Acesse o Oracle Identity Cloud Service. O Oracle Identity Cloud Service redireciona o seu web browser para o URL de callback do aplicativo 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]

Neste exemplo, o URL de callback redireciona seu web browser para a página /auth.html com seu token de acesso de usuário definido como um cookie.

Neste ponto, o aplicativo o autentica localmente usando o método passport.authenticate() e, em seguida, encaminha sua solicitação para a rota do /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]

Examinar o Código do Aplicativo Node.js

Depois que você efetuar sign-in no Oracle Identity Cloud Service e for redirecionado para o URL de callback do aplicativo Web Node.js, o aplicativo Web Node.js registrará informações na janela da linha de comandos.

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"}}

O método ensureAuthenticated() registra informações sobre o objeto JSON representando você, que estão conectados ao 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"}}

Verifique os Dados de Diagnóstico

Ambas as tentativas de log-in bem-sucedidas e malsucedidas iniciadas pela aplicação Web Node.js para o Oracle Identity Cloud Service são registradas nos arquivos de log de diagnóstico do Oracle Identity Cloud Service.

  1. Acesse o Oracle Identity Cloud Service.
  2. Na console do Identity Cloud Service, expanda a Gaveta de Navegação, clique em Definições e, em seguida, clique em Diagnóstico .
  3. Selecione Exibição da Atividade como o tipo de diagnóstico e clique em Salvar .
  4. Saia do Oracle Identity Cloud Service.

O Oracle Identity Cloud Service captura dados de diagnóstico dos próximos minutos do 15.

  1. Conclua as etapas no tópico Executar Aplicação Node.js desta solução para exibir a página Log-in do aplicativo Web Node.js.

  2. Clique no ícone vermelho Oracle, que aparece à direita ou você pode efetuar log-in com .

  3. Para fazer uma tentativa de sign-in malsucedida, informe um nome de usuário ou senha incorretos na página Oracle Identity Cloud Service Sign In .

  4. Para efetuar sign-in com sucesso, informe seu nome de usuário e senha corretos.

  5. Use a aplicação Node.js Web para efetuar sign-out do Oracle Identity Cloud Service.

  6. Efetue sign-in novamente no Oracle Identity Cloud Service.

  7. Na console do Identity Cloud Service, expanda o Gaveta de Navegação, clique em Relatórios e, em seguida, clique em Dados de Diagnóstico.

  8. Selecione 15-Minute para o intervalo de tempo, Exibição de Atividade para o tipo de log e CSV para o formato de relatório e clique em Fazer Download do Relatório .

O arquivo de log de diagnóstico inclui informações como as seguintes sobre o usuário que está acessando o 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

Os logs mais recentes aparecem na parte superior do arquivo.