Share via


Configurar declarações de grupo e funções de aplicativo em tokens

Este artigo ajuda você a configurar seus aplicativos com definições de função de aplicativo e atribuir grupos de segurança a funções de aplicativo para que você possa melhorar a flexibilidade e o controle e, ao mesmo tempo, aumentar a segurança do aplicativo com o menor privilégio.

O Microsoft Entra ID oferece suporte ao envio de grupos de segurança atribuídos a um usuário, funções de diretório do Microsoft Entra e grupos de distribuição como declarações em um token. Você pode usar essa abordagem para direcionar a autorização em aplicativos. No entanto, o Microsoft Entra ID limita o suporte de grupo em um token pelo tamanho do token. Quando o usuário é membro de muitos grupos, não há grupos no token.

Neste artigo, você aprenderá uma abordagem alternativa para obter informações do usuário em tokens usando o suporte de grupo do Microsoft Entra. Em vez disso, você configura seus aplicativos com definições de função de aplicativo e atribui grupos a funções de aplicativo. Essa prática recomendada para desenvolvedores Zero Trust melhora a flexibilidade e o controle, ao mesmo tempo em que aumenta a segurança do aplicativo com o menor privilégio.

Você pode configurar declarações de grupo em tokens que você pode usar em seus aplicativos para autorização. Lembre-se de que as informações do grupo no token são atualizadas somente quando você recebe o token. As reclamações de grupo suportam dois padrões principais:

  • Grupos identificados pelo atributo OID (identificador de objeto do Microsoft Entra).
  • Grupos identificados pelo atributo ou GroupSID para grupos e usuários sincronizados com o sAMAccountName Ative Directory.

A associação ao grupo pode orientar as decisões de autorização. Por exemplo, o exemplo a seguir mostra algumas declarações em um token. Você pode adicionar declarações de grupo e funções a tokens de ID ou de acesso.

"aud": "e18c04b1-4868-4b93-93d1-8d71f17ab99b", 
"iss": "https://login.microsoftonline.com/833ced3d-cb2e-41de-92f1-29e2af035ddc/v2.0", 
"iat": 1669657224, "nbf": 1669657224, "exp": 1669661124, 
"groups": [ 
   "0760b6cf-170e-4a14-91b3-4b78e0739963", 
   "3b2b0c93-acd8-4208-8eba-7a48db1cd4c0" 
 ],
"oid": "cb7eda1b-d09a-40ae-b8bb-37836ebc6abd",
"sub": "3OBtLXUC2ZrN_ADLNjW9X4o0lcd61py7lgHw3Skh77s",
"tid": "833ced3d-cb2e-41ce-92f1-29e2af035ddc", 
"ver": "2.0", 
"wids": [ 
   "cf1c38e5-3621-4004-a7cb-879624dced7c", 
   "b79fbf4d-3ef9-4689-8143-76b194e85509" 
 ]

A groups matriz de declarações compreende as IDs dos grupos aos quais esse usuário é membro. A wids matriz compreende as IDs das funções do Microsoft Entra atribuídas a esse usuário. Aqui, mostra que as funções atribuídas a esse usuário incluem Desenvolvedor de Aplicativos e membro padrão, cf1c38e5-3621-4004-a7cb-879624dced7c conforme 3b2b0c93-acd8-4208-8eba-7a48db1cd4c0 indicado.

Seu aplicativo pode tomar decisões de autorização com base na presença ou ausência dessas declarações e seus valores. Consulte Funções internas do Microsoft Entra para obter uma lista de valores para a wids declaração.

Para adicionar as groups declarações e wids aos seus tokens, selecione Todos os grupos, conforme mostrado no exemplo a seguir da tela Registros | de aplicativos Configuração de token | Declarações | opcionais Editar grupos Declaração.

A captura de tela da tela Editar declarações de grupo mostra os tipos de grupo selecionados: Grupos atribuídos ao aplicativo.

Excesso de grupo

Quando você solicita todos os grupos em seu token, como mostrado no exemplo acima, você não pode confiar que o token tenha a groups declaração em seu token. Há limites de tamanho em tokens e em groups reivindicações para que eles não se tornem muito grandes. Quando o usuário é membro de muitos grupos, seu aplicativo precisa obter a associação de grupo do usuário do Microsoft Graph. Os limites para grupos em uma groups reivindicação são:

  • 200 grupos para web tokens JSON (JWT).
  • 150 grupos para tokens SAML (Security Assertion Markup Language).
  • Seis grupos ao usar o fluxo implícito (por exemplo, usando ASP.NET núcleo que obtém tokens de ID através da parte de fluxo implícito de um fluxo híbrido).
    • O fluxo implícito não é mais recomendado para aplicativos Web de página única.
    • O fluxo implícito pode ser usado em aplicativos Web apenas para o token de ID, nunca o token de acesso, em um fluxo híbrido OAuth2.

Se você estiver usando OpenID Connect ou OAuth2, poderá ter até 200 grupos em seu token. Se você estiver usando SAML, poderá ter apenas 150 grupos porque os tokens SAML são maiores que os tokens OAuth2 e OpenID Connect. Se você estiver usando o fluxo implícito, o limite é seis porque essas respostas aparecem na URL. Em todos esses casos, em vez de ter uma groups reivindicação, você verá uma indicação (conhecida como excesso de grupo) que informa que o usuário é membro de muitos grupos para caber em seu token.

No exemplo de token a seguir, para uma conexão OpenID, ou OAuth2, JSON web token (JWT), não há uma groups declaração se o usuário for membro de muitos grupos. Em vez disso, há uma _claim_names declaração que contém um groups membro da matriz.

Captura de tela do token de exemplo mostra a consulta.

No exemplo de token acima, você vê que a declaração deve ser mapeada groups para src1. Em teoria, você procuraria a _claim_sources reivindicação e encontraria o src1 membro. A partir daí, você encontraria a consulta Gráfico que usaria para obter a associação ao grupo. No entanto, há um problema com o que você vê no exemplo de consulta do Graph. Ele vai para o Azure AD Graph (que a Microsoft está preterindo), então não o use.

A indicação implícita de excesso de fluxo é feita com uma hasgroups reivindicação em vez da groups reivindicação.

Para garantir a autorização adequada usando a associação ao grupo, peça ao seu aplicativo para verificar a groups declaração. Se estiver presente, use essa declaração para determinar a associação de grupo do usuário. Se não houver nenhuma groups reivindicação, verifique a existência de uma hasgroups reivindicação ou uma _claim_names reivindicação com um groups membro da matriz. Se qualquer uma dessas declarações estiver presente, o usuário será membro de muitos grupos para o token. Nesse caso, seu aplicativo deve usar o Microsoft Graph para determinar a associação de grupo para o usuário. Consulte Listar as associações de um usuário (direto e transitivo) para encontrar todos os grupos, diretos e transitivos, dos quais o usuário é membro.

Se o seu aplicativo exigir informações de associação de grupo em tempo real, use o Microsoft Graph para determinar a associação ao grupo. Lembre-se de que as informações no token que você recebe estão atualizadas apenas no momento em que você adquire o token.

Veja o exemplo a seguir da tela Registros de aplicativos: Configuração | de token, | Declarações | opcionais, Editar grupos, Declaração. Uma maneira de evitar atingir uma declaração de excesso de idade de grupo é selecionar Grupos atribuídos ao aplicativo na tela Editar declaração de grupos em vez de Todos os grupos.

A captura de tela da tela Editar declarações de grupo mostra os tipos de grupo selecionados: Grupos de segurança, Funções de diretório e Todos os grupos.

Quando você seleciona Grupos atribuídos ao aplicativo, um grupo é incluído na groups declaração se as seguintes condições forem verdadeiras:

A partir da publicação deste artigo, os Grupos atribuídos à opção de aplicativo não suportam associação indireta. A atribuição de grupo requer pelo menos uma licença de nível P1. Um locatário gratuito não pode atribuir grupos a um aplicativo.

Grupos e funções do aplicativo

Outra maneira de evitar o problema de sobrecarga de grupo é o aplicativo definir funções de aplicativo que permitem usuários e grupos como tipos de membros. Conforme mostrado no exemplo a seguir da tela Registros | de aplicativos Funções | do aplicativo Criar função do aplicativo, selecione Usuários/Grupos para Tipos de membros permitidos.

A captura de ecrã do ecrã Criar função de aplicação mostra Tipos de membros permitidos: Utilizadores/Grupos.

Depois de criar a função do aplicativo no registro do aplicativo, os profissionais de TI podem atribuir usuários e grupos à função. Seu aplicativo recebe uma roles declaração em seu token (token de ID para aplicativo, token de acesso para APIs) com todas as funções atribuídas do usuário conectado, conforme mostrado no exemplo de token a seguir.

"aud": "acaf6ce9-81f0-462a-a93d-a314070738d3",
"iss": "https://login.microsoftonline.com/833ced3d-cb2e-41de-92f1-29e2af035ddc/v2.0",
"iat": 1670826509, "nbf": 1670826509, "exp": 1670830409,
"name": "Kyle Marsh",
"oid": "cb7eda1b-d09a-419e-b8bb-37836ebc6abd",
"preferred_username": "kylemar@idfordevs.dev",
"roles": [
 "Approver",
 "Reviewer" 
],
"sub": "dx-4lf-0loB3c3uVrULnZ2VTLuRRWYff0q7-QlIfYU4",
"tid": "833ced3d-cb3e-41de-92f1-29e2af035ddc",

Lembre-se de fazer com que seu aplicativo lide com as seguintes condições:

  • ausência de roles alegação
  • O usuário não tem atribuição de função
  • Vários valores na roles declaração quando o usuário tem mais de uma atribuição de função

Ao criar funções de aplicativo que permitem usuários e grupos como membros, sempre defina uma função de usuário de linha de base sem funções de autorização elevadas. Quando uma configuração de Aplicativo Empresarial requer atribuição, somente usuários com atribuição direta a um aplicativo ou associação a um grupo atribuído ao aplicativo podem usar o aplicativo.

Se o seu aplicativo tiver definido funções de aplicativo que permitem usuários e grupos como membros, então, quando um usuário ou grupo for atribuído ao aplicativo, uma das funções de aplicativo definidas deverá fazer parte da atribuição do usuário ou grupo ao aplicativo. Se o seu aplicativo tiver definido apenas funções elevadas (como admin) para o aplicativo, todos os usuários e grupos receberão a função de administrador. Quando você define uma função base (como user), os usuários e grupos atribuídos ao aplicativo podem receber a função de usuário base.

Além de evitar declarações de excesso de grupo, outra vantagem de usar funções é não precisar mapear entre um ID ou nome de grupo e o que isso significa em seu aplicativo. Por exemplo, seu código pode procurar a declaração de função de administrador em vez de iterar através de grupos nas groups declarações e decidir quais IDs de grupo devem ter permissão para a funcionalidade de administrador.

Verificar e usar funções em seu código

Quando você define funções de aplicativo para seu aplicativo, é sua responsabilidade implementar a lógica de autorização para essas funções. Consulte Implementar controle de acesso baseado em função em aplicativos para saber como implementar a lógica de autorização em seus aplicativos.

Próximos passos