Entender a autorização da API e o cache de token

Concluído

O design do portal da empresa inclui a leitura do perfil do usuário conectado do Microsoft Graph. A autenticação identifica o usuário para o portal, mas uma chamada à API também precisa de um token de acesso com permissões apropriadas.

Esta unidade explica tipos de permissão, escopos e um padrão ilustrativo de cache de token MSAL4J. Ele não pressupõe que um aplicativo ou sessão de entrada esteja em execução.

Permissões e escopos da API

Uma API protegida define permissões para sua funcionalidade e dados. Microsoft Graph, por exemplo, tem permissões diferentes para ler um perfil, ler um calendário e enviar emails. Um aplicativo solicita apenas as permissões necessárias para a operação pretendida.

Microsoft Entra ID dá suporte a dois tipos de permissão:

Tipo de permissão Contexto Consentimento
Permissões delegadas O aplicativo atua em nome de um usuário conectado. O acesso é restringido pelas permissões concedidas e pelo acesso do usuário. Um usuário ou administrador autorizado pode conceder consentimento, dependendo da permissão e da política de locatário.
Permissões do aplicativo O aplicativo atua como ele mesmo sem um usuário conectado, como um serviço em segundo plano. O consentimento do administrador é necessário.

O portal usa permissões delegadas User.Read para ler o perfil do usuário conectado. Essa permissão não concede acesso aos dados de cada usuário ou recursos não relacionados, como calendários.

Os escopos descrevem o acesso solicitado

Em uma solicitação de autorização delegada, os escopos do OAuth 2.0 expressam as permissões que o aplicativo solicita. Um escopo pode identificar o recurso e a permissão; por exemplo, https://graph.microsoft.com/Calendars.Read solicita permissão de leitura de calendário para Microsoft Graph.

Os exemplos usam o escopo User.Readúnico. Para escopos Microsoft Graph, o identificador de recurso pode ser omitido, portanto, isso representa https://graph.microsoft.com/User.Read. Para obter mais informações, consulte Escopos e permissões.

Permissões de API configuradas, escopos solicitados e consentimento são distintos. Adicionar uma permissão de API a um registro de aplicativo não concede consentimento nem altera os escopos solicitados pelo código do aplicativo.

Um token de acesso é específico para sua API

Um token de acesso destina-se a um recurso específico. Um token para Microsoft Graph não é intercambiável com um token para outra API e um token de ID não é um substituto para um token de acesso à API.

MSAL4J adquire e armazena tokens em cache. O aplicativo usa o token para seu recurso pretendido em vez de analisá-lo para fazer suposições sobre a identidade do usuário conectado ou tratá-lo como um código de autorização reutilizável.

Exemplo de aquisição silenciosa de token

Para solicitações futuras, um aplicativo web pode solicitar um token à MSAL sem submeter o usuário a outra interação de login. O fragmento a seguir é adaptado do exemplo de referência.AuthHelper Ele ilustra a restauração de um cache associado à sessão e a solicitação de um token para uma conta já representada nesse contexto.

final SilentParameters parameters = SilentParameters
                                        .builder(Collections.singleton(Config.SCOPES), context.getAccount())
                                        .build();

final ConfidentialClientApplication client = getConfidentialClientInstance();
client.tokenCache().deserialize(context.getTokenCache());

final IAuthenticationResult result = client.acquireTokenSilently(parameters).get();

SilentParameters identifica o escopo e a conta solicitados. Neste exemplo, Config.SCOPES contém User.Reade context fornece a conta e o cache serializado associado à sessão autenticada. São funções auxiliares de exemplo da aplicação, não valores que o aprendiz deve obter.

Depois que o cache é restaurado, acquireTokenSilently tenta atender à solicitação sem interação do usuário. Ele pode retornar um token de acesso armazenado em cache utilizável ou usar um token de atualização armazenado em cache quando aplicável. "Silencioso" não significa necessariamente que nenhuma solicitação de rede ocorra.

Esse fragmento omite a persistência do cache ao redor e o tratamento de exceções. Se a MSAL indicar que a interação do usuário é necessária, o aplicativo Web iniciará uma nova solicitação de autorização e processará o retorno de chamada resultante. Ele não resgata o código de autorização antigo novamente. Outras falhas, como erros de rede ou de configuração, precisam de tratamento de erro apropriado em vez de um loop de entrada incondicional.

Os dados de cache de token e de sessão contêm informações confidenciais. Um aplicativo completo deve proteger esses dados, associá-los à conta e à sessão corretas e persistir as alterações de cache adequadamente.

Interpretar o resultado antes da chamada à API

A aquisição bem-sucedida do token resulta em um IAuthenticationResult contendo o token de acesso e informações sobre seu tempo de vida e o contexto da conta. Para uma solicitação Microsoft Graph, o aplicativo fornece o token de acesso do Graph para seu cliente HTTP ou provedor de autenticação do Graph.

O MSAL4J não lê o perfil de um usuário apenas adquirindo esse token. A solicitação de API separada executa a operação de dados.

Microsoft Graph fornece o recurso

Microsoft Graph expõe Microsoft dados e serviços de nuvem por meio de https://graph.microsoft.com. O endpoint /v1.0/me representa o usuário autenticado e requer um contexto de usuário delegado.

A próxima unidade analisa uma solicitação ilustrativa para esse endpoint e a solicitação equivalente feita por meio do SDK do Microsoft Graph para Java. A visão geral do Microsoft Graph descreve a API mais ampla.