Cenário: implementar o logon único no serviço em um suplemento do Outlook
Neste artigo exploraremos um método recomendado de usar o token de acesso de logon único e o token de identidade do Exchange juntos para fornecer um logon único na implementação do seu próprio serviço de back-end. Usando dois tokens em conjunto, será possível aproveitar os benefícios do token de acesso SSO quando ele estiver disponível, garantindo que o suplemento funcionará quando ele não estiver disponível, como quando o usuário alterna para um cliente não compatível ou quando a caixa de correio do usuário está em um servidor do Exchange local.
Observação
A API de Logon Único é compatível com Word, Excel, Outlook e PowerPoint. Confira mais informações sobre os programas para os quais a API de logon único tem suporte no momento em Conjuntos de requisitos da IdentityAPI. Se você estiver trabalhando com um suplemento do Outlook, habilite a Autenticação Moderna para a locação do Microsoft 365. Para obter informações sobre como fazer isso, consulte Habilitar ou desabilitar a autenticação moderna para o Outlook em Exchange Online.
Por que usar o token de acesso SSO?
O token de identidade do Exchange está disponível em todos os conjuntos de requisitos de APIs do suplemento, portanto, pode parecer tentador depender simplesmente desse token e ignorar o token SSO completamente. No entanto, o token SSO oferece algumas vantagens em relação ao token de identidade do Exchange, portanto, quando disponível, torna-se o método recomendado.
- O token SSO usa um formato padrão OpenID e é emitido pelo Azure. Isso simplifica bastante o processo de validação desses tokens. Em comparação, os tokens de identidade do Exchange usam um formato personalizado com base no Token Web JSON padrão, exigindo trabalho personalizado para validar o token.
- O token SSO pode ser usado pelo back-end para recuperar um token de acesso do Microsoft Graph sem que o usuário tenha que fazer qualquer outra ação de entrada.
- O token SSO fornece informações avançadas de identidade, como o nome para exibição do usuário.
Cenário de suplemento
Para este exemplo, considere um suplemento formado pela interface do usuário e scripts (HTML + JavaScript) do suplemento e uma API Web de back-end chamada pelo suplemento. A API Web de back-end faz chamadas para a API do Microsoft Graph e a API de Dados da Contoso, uma API fictícia criada por terceiros. Como a API do Microsoft Graph, a API de Dados da Contoso requer autenticação OAuth. O requisito é que a API Web de back-end seja capaz de chamar as duas APIs sem ter que solicitar ao usuário que forneça credenciais sempre que um token de acesso expirar.
Para fazer isso, a API de backend cria um banco de dados de usuários seguro. Cada usuário receberá uma entrada no banco de dados onde o back-end armazenará tokens de atualização de vida longa da API do Microsoft Graph API e da API de Dados da Contoso. A marcação JSON a seguir representa uma entrada do usuário no banco de dados.
{
"userDisplayName": "...",
"ssoId": "...",
"exchangeId": "...",
"graphRefreshToken": "...",
"contosoRefreshToken": "..."
}
O suplemento inclui o token de acesso SSO (se estiver disponível) ou o token de identidade do Exchange (se o token SSO não estiver disponível) com todas as chamadas feitas para a API Web de back-end.
Inicialização do suplemento
Quando o suplemento iniciar, ele enviará uma solicitação à API Web de back-end para determinar se o usuário está registrado (por exemplo, se tem um registro associado no banco de dados do usuário) e se a API tem tokens de atualização para o Graph e para a Contoso. Nessa chamada, o suplemento inclui o token SSO (se disponível) e o token de identidade.
A API Web utiliza os métodos em Autenticar um usuário com um token de logon único em um suplemento do Outlook e Autenticar um usuário com um token de identidade do Exchange para validar e gerar um identificador exclusivo a partir dos dois tokens.
Se um token SSO tiver sido fornecido, a API Web consultará o banco de dados do usuário em busca de uma entrada que tenha um valor
ssoId
que corresponda ao identificador exclusivo gerado pelo token SSO.- Se não houver uma entrada, vá para a próxima etapa.
- Se houver uma entrada, vá para a etapa 5.
A API Web consultará o banco de dados em busca de uma entrada que tenha um valor
exchangeId
que corresponda ao identificador exclusivo gerado pelo token de identidade do Exchange.- Se houver uma entrada e um token SSO tiver sido fornecido, atualize o registro do usuário no banco de dados para definir o valor
ssoId
para o identificador exclusivo gerado a partir do token SSO e prossiga para a etapa 5. - Se houver uma entrada e nenhum token SSO tiver sido fornecido, prossiga para a etapa 5.
- Se não houver entradas, crie uma nova entrada. Defina
ssoId
como o identificador exclusivo gerado por meio do token SSO (se disponível) e definaexchangeId
como o identificador exclusivo gerado por meio do token de identidade do Exchange.
- Se houver uma entrada e um token SSO tiver sido fornecido, atualize o registro do usuário no banco de dados para definir o valor
Verifique se há um token de atualização válido no valor
graphRefreshToken
do usuário.- Se o valor for inválido ou estiver ausente no token SSO fornecido, use o Fluxo Em Nome De do OAuth2 para obter um token de acesso e atualizar o token do Microsoft Graph. Salve o token de atualização válido no valor
graphRefreshToken
para o usuário.
- Se o valor for inválido ou estiver ausente no token SSO fornecido, use o Fluxo Em Nome De do OAuth2 para obter um token de acesso e atualizar o token do Microsoft Graph. Salve o token de atualização válido no valor
Procure tokens de atualização válidos em
graphRefreshToken
econtosoRefreshToken
.- Se ambos valores forem válidos, responda o suplemento para indicar que o usuário já está registrado e configurado.
- Se o valor for inválido, responda o suplemento para indicar que a configuração do usuário é obrigatória, além de quais serviços (Contoso ou Graph) precisam ser configurados.
O suplemento verifica a resposta.
- Se o usuário já estiver registrado e configurado, o suplemento prosseguirá com a operação normal.
- Se a configuração do usuário for exigida, o suplemento entrará em modo "configuração" e solicitará que o usuário autorize o suplemento.
Autorizar a API Web de back-end
Para minimizar a necessidade de ter que informar o usuário de fazer login, o ideal é que o procedimento para autorizar a API Web de back-end a chamar a API do Microsoft Graph e a API de Dados da Contoso ocorra apenas uma vez.
Com base na resposta da API Web de back-end, talvez o suplemento precise da autorização do usuário da API do Microsoft Graph, da API de Dados da Contoso ou de ambas APIs. Como as duas APIs usam a autenticação OAuth2, o método é semelhante para ambas.
O suplemento informa o usuário que precisa que ele autorize o uso da API e pede a ele para clicar em um link ou em um botão para iniciar o processo.
Após a conclusão do fluxo, o suplemento envia o token de atualização à API Web de back-end e inclui o token SSO (se disponível) ou o token de identidade do Exchange.
A API Web de back-end localiza o usuário no banco de dados e atualiza o token de atualização apropriado.
O suplemento prossegue com a operação normal.
Operação normal
Sempre que o suplemento chamar a API Web de back-end, incluirá o token SSO ou o token de identidade do Exchange. A API Web de back-end localiza o usuário pelo token e usa os tokens de atualização armazenados para obter tokens de acesso da API do Microsoft Graph e da API de Dados da Contoso. Enquanto os tokens de atualização forem válidos, o usuário não terá que entrar novamente.