Semion Vasilevitzky e Jonathan Elkabas

Nota do editor: Bem-vindo ao quarto e último tutorial prático da série «Compreender e prevenir ataques à identidade do agente Entra ID: Um guia abrangente». Este guia técnico em várias partes ajuda-o a compreender a abordagem da Microsoft em relação às identidades dos agentes e a forma como pode protegê-las contra agentes maliciosos. Para rever os capítulos anteriores e as lições práticas, comece aqui.

No Capítulo 5 do nosso guia, aprendeu e praticou a utilização do Registo de Agentes da Microsoft e acompanhou passo a passo as operações de três fluxos de autenticação de identidade de agentes no Entra ID.

Neste «Practice Checkpoint», iremos verificar os três fluxos que discutimos, acompanhando cada um deles de início a fim através do Microsoft Graph e mostrando as reivindicações reais do token em cada etapa, para ligar todos os pontos.

Por uma questão de coerência e clareza, continuaremos a utilizar a mesma identidade de agente que criámos nos passos anteriores e analisaremos os tokens resultantes produzidos em cada fluxo.

Eis um breve resumo das informações de que precisa:

  • ID do projeto = 3534ec06-21ea-4080-abd4-95116e260203
  • ID do Blueprint SP = 17a48807-f813-421b-85b9-8c7e794bc4b9
  • Identificação do agente: ID = b85d92be-fa90-486b-94ed-b5ad91d35ceb
  • ID do agente do utilizador = 2954440b-1617-46b1-9156-dad15f1f824f
  • Permissões delegadas hereditárias = Group.Read.All
  • Permissões diretas exclusivas da aplicação ao nível da identidade do agente = User.Read.All

Fluxo autónomo

Neste fluxo, a própria identidade do agente precisa de aceder a um recurso.

Para começar, precisamos de obter o token T1. Este processo é semelhante à obtenção de um token de acesso para um modelo de identidade de agente, mas com duas diferenças fundamentais:

  • âmbito = api://AzureADTokenExchange/.default
  • incluir fmi_path = <agent-identity-id>
Figura 1. Obtenção do token T1

Podemos descodificar o token T1, em que:

  • O «oid» corresponde ao ID do SP do blueprint.
  • azp corresponde ao ID do modelo de identidade do agente.
  • aud pertence à aplicação «AAD Token Exchange Endpoint», que é api://AzureADTokenExchange.
Figura 2: Descodificação do token T1

Utilizando o token T1, podemos agora obter o token de acesso de identidade do agente.

Figura 3: Obtenção do token de acesso de identidade do agente

Ao analisarmos o token Graph, podemos constatar que:

  • A alegação da aud é o Microsoft Graph.
  • O «appid», bem como a declaração «oid», corresponde ao ID de identidade do agente.
  • O funções A reivindicação inclui o User.Read.All autorização, que atribuímos anteriormente e que foi atribuída diretamente à identidade do agente como uma autorização exclusiva da aplicação.

Nesta fase, a identidade do agente pode aceder ao Graph no inquilino, de acordo com as suas permissões exclusivas da aplicação.

Figura 4: Descodificação do token de acesso de identidade do agente do Graph

Fluxo «em nome de»

Neste fluxo, a identidade do agente executa ações delegadas na qualidade de utilizador e demonstra âmbitos de delegação hereditários.

Para começar, teremos de obter um token de cliente (TC). Para tal, temos primeiro de definir os âmbitos de autorização OAuth2 no blueprint e dar o meu consentimento como utilizador.

Figura 5: Definição dos âmbitos de autorização OAuth2 no blueprint

Como próximo passo, iremos criar uma aplicação SAP através da interface do utilizador.

Figura 6: Registo da nossa aplicação SAP

Vamos adicionar as permissões do Blueprint que acabámos de criar à nossa aplicação DemoSAP:

Figura 7: Adicionar permissões de blueprint à nossa aplicação SAP de demonstração

Para esta demonstração, vamos também permitir o fluxo do cliente público:

Figura 8: Ativar os fluxos de cliente públicos na nossa demonstração de autenticação

Agora podemos obter um token TC. O ClientID é o ID da aplicação que acabámos de criar:

Figura 9. Obtenção de um token TC utilizando o ID da aplicação recém-criado

A seguir, temos de passar pelas solicitações de consentimento habituais.

Figura 10. Concessão de autorizações para a nossa aplicação de demonstração

Isto irá devolver o token TC, que me pertence enquanto utilizador. Podemos ver que a reivindicação «aud» corresponde ao ID do Blueprint:

Figura 11. A descodificação do token TC revela que a reivindicação «aud» corresponde ao ID do modelo de identidade do agente

Agora podemos obter o token T1 utilizando o mesmo método que já utilizámos.

Figura 12. Obter novamente o token T1

Antes de continuarmos, teríamos de dar o nosso consentimento para que a identidade do agente possa agir em nome do nosso utilizador, utilizando uma chamada padrão do OAuth2PermissionGrants com o âmbito que atribuímos como permissões hereditárias.

Se já tiver dado o seu consentimento para «AllPrincipals» na secção «Configurar permissões herdáveis», pode ignorar esta chamada.

Figura 13. Permitir que a identidade do agente atue em nome do utilizador

Por fim, utilizando os tokens TC e T1, podemos obter o token de acesso (TR).

Figura 14. Obtenção do token de acesso TR

O token de acesso descodificado apresenta:

  • Reivindicação SCP com as permissões hereditárias «Group.Read.All» que adicionámos anteriormente ao nível do blueprint.
  • o nome de exibição da aplicação e a reivindicação «appid», que identificam a identidade do agente que está a agir em nome do utilizador.
  • As reivindicações «idtyp», «name» e «oid» pertencem todas ao utilizador (uma vez que se trata de um token delegado).
Figura 15. Descodificação do token de acesso TR

Fluxo de utilizadores do agente

Este fluxo é relevante para um utilizador agente que precise de realizar ações com um contexto de utilizador.

Tal como no fluxo autónomo de identidade do agente, precisamos de obter um token T1.

Figura 16. Obtenção do token T1 para o nosso fluxo de autenticação do utilizador do agente

Em seguida, teríamos de dar o nosso consentimento para permitir que a identidade do agente atue em nome do utilizador do agente, tal como fizemos no fluxo OBO.

Desta vez, iremos especificar o ID do utilizador do agente como o ID do principal. Se já tiver dado o seu consentimento para «AllPrincipals» na secção «Configurar permissões herdáveis», pode ignorar esta chamada.

Figura 17. Permitir que a identidade do agente atue em nome do utilizador do agente

Agora, utilizando o token T1, podemos obter o token T2.

Figura 18. Obtenção do token T2 para o nosso fluxo de autenticação do utilizador do agente

O token T2 descodificado revela as reivindicações «azp», «oid» e «sub», todas definidas com o ID de identidade do agente.

Figura 19. Revelação do identificador (ID) do agente nas nossas reivindicações de tokens T2 descodificados

Utilizando os tokens T1 e T2, podemos obter o token de acesso TR.

Figura 20. Obtenção do token de acesso TR para o nosso fluxo de autenticação do utilizador do agente

Como podemos ver, este token de acesso foi emitido para o Microsoft Graph. Apresenta o seguinte:

  • A reivindicação idtyp é um utilizador
  • A reivindicação «oid» corresponde ao ID de utilizador do agente
  • O «appid» está definido como o ID de identidade do agente, que é o pai do utilizador do agente.
  • scp contém o Group.Read.All, os escopos que adicionámos anteriormente.
Figura 21. Descodificação do token de acesso do fluxo de autenticação do utilizador do agente que foi emitido para o Microsoft Graph

Agora já tem uma identidade de agente ativa. Como é que a protege?

A criação da sua identidade de agente através destas sessões práticas deverá ter-lhe proporcionado uma compreensão prática de como os agentes irão trabalhar no seu inquilino Entra ID.

Agora, leia o capítulo final do nosso guia para ter uma visão geral do que pode correr mal — e de como proteger estas novas identidades.

Descubra como evitar uma catástrofe no Capítulo 6.


Explore o guia