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 osAMAccountName
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.
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.
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.
Quando você seleciona Grupos atribuídos ao aplicativo, um grupo é incluído na groups
declaração se as seguintes condições forem verdadeiras:
- o grupo é atribuído ao Aplicativo Empresarial
- o usuário é um membro direto do grupo
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.
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
- Personalizar tokens descreve as informações que você pode receber nos tokens do Microsoft Entra. Ele explica como personalizar tokens para melhorar a flexibilidade e o controle e, ao mesmo tempo, aumentar a segurança de confiança zero do aplicativo com o menor privilégio.
- Configurar declarações de grupo para aplicativos usando o Microsoft Entra ID mostra como o Microsoft Entra ID pode fornecer informações de associação de grupo de um usuário em tokens para uso em aplicativos.
- As práticas recomendadas de segurança para propriedades de aplicativos descrevem URI de redirecionamento, tokens de acesso (usados para fluxos implícitos), certificados e segredos, URI de ID de aplicativo e propriedade do aplicativo.
- Escopos da plataforma de identidade da Microsoft, permissões, & consentimento explica os conceitos fundamentais de acesso e autorização para ajudá-lo a criar aplicativos mais seguros e confiáveis.
- Use as práticas recomendadas de desenvolvimento de gerenciamento de acesso e identidade Zero Trust em seu ciclo de vida de desenvolvimento de aplicativos para criar aplicativos seguros.