Autenticação de aplicações aninhadas
Observação
- A autenticação de aplicações aninhadas (NAA) só está disponível na pré-visualização do programador público.
- O NAA só é suportado na aplicação de página única (SPA), como separadores.
O NAA é um novo protocolo de autenticação para SPAs incorporados em ambientes anfitriões, como o Teams, o Outlook e o Microsoft 365. Simplifica o processo de autenticação para facilitar o início de sessão único (SSO) entre aplicações aninhadas em aplicações anfitriãs suportadas. O modelo NAA suporta uma identidade primária para a aplicação anfitriã que inclui várias identidades de aplicações para aplicações aninhadas. A Microsoft utiliza este modelo em separadores do Teams, aplicações pessoais e Suplementos do Office.
O modelo NAA oferece várias vantagens sobre o fluxo On-Behalf-Of (OBO):
- O NAA requer que utilize apenas a biblioteca de MSAL.js. Não precisa de utilizar a
getAuthToken
função na biblioteca de cliente JavaScript do Teams (TeamsJS). - Pode chamar serviços como o Microsoft Graph com um token de acesso do seu código de cliente como SPA. Não é necessário um servidor de camada média.
- Pode utilizar o consentimento incremental e dinâmico para âmbitos (permissões).
- Não precisa de pré-autenticar os anfitriões, como o Teams ou o Microsoft 365, para chamar os seus pontos finais.
A tabela seguinte descreve a diferença entre o SSO do Teams Microsoft Entra e o NAA:
Passos necessários para o desenvolvimento | Teams Entra SSO Tradicional | NAA |
---|---|---|
Expor o URI de redirecionamento | Obrigatório | Obrigatório |
Registar a API no Microsoft Entra ID | Obrigatório | |
Definir um âmbito personalizado no Microsoft Entra ID | Obrigatório | |
Autorizar aplicações cliente do Teams | Obrigatório | |
Rever manifesto da aplicação (anteriormente denominado manifesto de aplicação do Teams) | Obrigatório | Recomendado* |
Adquirir token de acesso através do SDK do TeamsJS | Obrigatório | |
Pedir o consentimento do utilizador para obter mais permissões | Obrigatório | |
Realizar uma troca de OBO no servidor | Obrigatório |
- O administrador de TI pode bloquear a aplicação ou consentir apenas determinadas permissões para a aplicação no Microsoft Entra ID. Para o evitar, tem de incluir o ID da aplicação e o recurso predefinido no manifesto da aplicação para que o administrador aprove as permissões no centro de administração do Teams.
Casos de utilização para NAA
Cenário | Descrição |
---|---|
Consentir o SSO (e outras permissões) | Tom, um novo membro da equipa de design da Contoso, precisa de utilizar a aplicação Contoso em reuniões do Teams para colaborar em quadros. Após a primeira utilização, uma caixa de diálogo pede ao Tom para conceder permissões, incluindo ler o respetivo perfil para o seu avatar (User.Read). Depois de dar consentimento, o Tom pode utilizar a Contoso de forma totalmente integrada em reuniões futuras em todos os dispositivos. |
Autenticação ou Autenticação de Acesso Condicional | Tom, ao trabalhar a partir da Austrália, encontra um acionador de acesso condicional que requer autenticação multifator (MFA) para aceder à Contoso no Teams. Uma caixa de diálogo informa o Tom de que é necessária mais verificação, o que os leva ao longo do processo de MFA para continuar a utilizar a Contoso. |
Erros | O Tom enfrenta um erro de início de sessão com a Contoso devido a um problema ao obter informações da conta. O Tom encontra um botão de repetição que pede a reautenticação. No entanto, descobrem que o administrador de sistema tem acesso restrito à Contoso. |
Configurar NAA
Observação
- Uma vez que a NAA está em pré-visualização do programador e não é suportada por todos os ambientes de anfitrião, certifique-se de que marcar o suporte status com a função isNAAChannelRecommended() e fornece uma experiência de contingência para ambientes não suportados.
- Se a API devolver o valor como
true
, chame a Biblioteca de Autenticação da Microsoft (MSAL) para o fluxo de NAA. Se devolverfalse
, continue a utilizar o método de obtenção de tokens existente.
Para configurar a autenticação aninhada, siga estes passos:
- Registar o SPA
- Adicionar mediadores fidedignos
- Inicializar a aplicação cliente pública
- Adquirir o seu primeiro token
- Chamar uma API
Registar o SPA
Tem de criar um registo de aplicação Microsoft Entra ID para o seu suplemento no portal do Azure. O registo da aplicação tem de ter um nome, um tipo de conta suportado e um redirecionamento de SPA. Após o registo da sua aplicação, portal do Azure gera um ID de registo de aplicações Microsoft Entra. Se o suplemento necessitar de um registo de aplicações adicional para além de NAA e SSO, veja Registar a aplicação de página única..
Adicionar mediadores fidedignos
Para configurar a autenticação de aplicações aninhadas, a aplicação tem de configurar ativamente um URI de redirecionamento para a sua aplicação. O URI de redirecionamento indica ao plataforma de identidade da Microsoft que a sua aplicação pode ser mediada por anfitriões suportados. O URI de redirecionamento da aplicação tem de ser do tipo Aplicação de página única e estar em conformidade com o seguinte esquema:
brk-multihub://<your_domain>
Onde
-
brk-multihub
permite que a sua autenticação seja mediada por quaisquer anfitriões suportados pelo Microsoft 365 que esteja configurado para serem executados em, por exemplo, Teams, Outlook ou Microsoft365.com. - < > your_domain é o nome de domínio completamente qualificado onde a sua aplicação está alojada. Por exemplo, brk-multihub://contoso.com.
O seu domínio tem de incluir apenas a origem e não os respetivos subcaminhos. Por exemplo:
✔️ brk-multihub://myapp.teams.microsoft.com
❌ brk-multihub://myapp.teams.microsoft.com/go
Para obter mais informações sobre como atualizar a sua aplicação Teams para ser executada no Outlook e Microsoft365.com, consulte Expandir aplicações do Teams no Microsoft 365.
Inicializar a aplicação cliente pública
Observação
Para garantir uma autenticação bem-sucedida, inicialize o TeamsJS antes de inicializar a MSAL.
Inicialize a MSAL e obtenha uma instância da aplicação cliente pública para obter tokens de acesso, quando necessário.
import {
AccountInfo,
IPublicClientApplication,
createNestablePublicClientApplication,
} from "@azure/msal-browser";
const msalConfig = {
auth: {
clientId: "your_client_id",
authority: "https://login.microsoftonline.com/{your_tenant_id}",
supportsNestedAppAuth: true
},
};
let pca: IPublicClientApplication;
export function initializePublicClient() {
console.log("Starting initializePublicClient");
return createNestablePublicClientApplication(msalConfig).then(
(result) => {
console.log("Client app created");
pca = result;
return pca;
}
);
}
Adquirir o seu primeiro token
Os tokens adquiridos pelo MSAL.js através da autenticação de aplicações aninhadas são emitidos para o seu ID de registo de aplicações Microsoft Entra. MSAL.js processa a aquisição de tokens para autenticação de utilizador. Tenta obter um token de acesso silenciosamente. Se não for bem-sucedido, pede consentimento ao utilizador. Em seguida, o token é utilizado para chamar o microsoft API do Graph ou outros recursos protegidos Microsoft Entra ID. Ao contrário do fluxo OBO, não precisa de pré-autenticar os anfitriões para chamar os pontos finais.
Para adquirir um token, siga estes passos:
Utilize MSAL.js para adquirir tokens para o ID da aplicação. Para obter mais informações, veja Adquirir e utilizar um token de acesso.
Utilize
getActiveAccount
a API para verificar se existe uma conta ativa para chamar opublicClientApplication
. Se não existir uma conta ativa, tente obter uma da cache comgetAccount
, utilizando parâmetros de filtro adicionais, comotenantID
,homeAccountId
eloginHint
a partir da interface de contexto.Observação
A
homeAccountId
propriedade é equivalente auserObjectId
no TeamsJS.Chame
publicClientApplication.acquireTokenSilent(accessTokenRequest)
para adquirir o token silenciosamente sem interação do utilizador.accessTokenRequest
especifica os âmbitos para os quais o token de acesso é pedido. O NAA suporta o consentimento incremental e dinâmico. Certifique-se de que pede sempre os âmbitos mínimos necessários para que o código conclua a tarefa.Se não estiver disponível nenhuma conta, MSAL.js devolve um
InteractionRequiredAuthError
. ChamadapublicClientApplication.acquireTokenPopup(accessTokenRequest)
para apresentar uma caixa de diálogo interativa para o utilizador.acquireTokenSilent
pode falhar se o token tiver expirado ou se o utilizador não tiver consentido todos os âmbitos pedidos.
O fragmento de código seguinte mostra um exemplo para aceder a um token:
// MSAL.js exposes several account APIs, logic to determine which account to use is the responsibility of the developer
const account = publicClientApplication.getActiveAccount();
const accessTokenRequest = {
scopes: ["user.read"],
account: account,
};
publicClientApplication
.acquireTokenSilent(accessTokenRequest)
.then(function (accessTokenResponse) {
// Acquire token silent success
let accessToken = accessTokenResponse.accessToken;
// Call your API with token
callApi(accessToken);
})
.catch(function (error) {
//Acquire token silent failure, and send an interactive request
if (error instanceof InteractionRequiredAuthError) {
publicClientApplication
.acquireTokenPopup(accessTokenRequest)
.then(function (accessTokenResponse) {
// Acquire token interactive success
let accessToken = accessTokenResponse.accessToken;
// Call your API with token
callApi(accessToken);
})
.catch(function (error) {
// Acquire token interactive failure
console.log(error);
});
}
console.log(error);
});
Chamar uma API
Depois de receber o token, utilize-o para chamar a API. Isto garante que a API é chamada com um token válido para fazer pedidos autenticados ao servidor.
O exemplo seguinte mostra como fazer um pedido autenticado ao Microsoft API do Graph para aceder aos dados do Microsoft 365:
var headers = new Headers();
var bearer = "Bearer " + access_token;
headers.append("Authorization", bearer);
var options = {
method: "GET",
headers: headers
};
var graphEndpoint = "<https://graph.microsoft.com/v1.0/me>";
fetch(graphEndpoint, options)
.then(function (response) {
//do something with response
});
Práticas recomendadas
Utilize a autenticação silenciosa sempre que possível: MSAL.js fornece o
acquireTokenSilent
método , que processa a renovação de tokens ao fazer pedidos de token silenciosos sem pedir ao utilizador. O método procura primeiro um token em cache válido no armazenamento do browser. Se não encontrar um, a biblioteca efetua um pedido silencioso para Microsoft Entra ID e, se existir uma sessão de utilizador ativa (determinada por um conjunto de cookies no browser no domínio Microsoft Entra), Microsoft Entra ID devolve um novo token. A biblioteca não invoca automaticamente oacquireTokenSilent
método . Recomendamos que chameacquireTokenSilent
na sua aplicação antes de efetuar uma chamada à API para obter um token válido.Em determinados casos, a tentativa de obter o token com o
acquireTokenSilent
método falha. Por exemplo, quando existe uma sessão de utilizador expirada com Microsoft Entra ID ou uma alteração de palavra-passe por parte do utilizador da aplicação,acquireTokenSilent
falha. Chame o método de token de aquisição interativo (acquireTokenPopup
).Ter uma contingência: os fluxos de NAA oferecem compatibilidade em todo o ecossistema da Microsoft. No entanto, a sua aplicação pode aparecer em clientes de nível inferior ou legados que não são atualizados para suportar o NAA. Nesses casos, a sua aplicação não consegue suportar o SSO totalmente integrado e poderá ter de invocar APIs especiais para interagir com o utilizador para abrir caixas de diálogo de autenticação. Para obter mais informações, veja Ativar o SSO para a aplicação de separador.
Observação
Se estiver a utilizar um fornecedor de identidade não Microsoft Entra, não pode utilizar a autenticação pop-up.
Suporte para NAA: o NAA pode não ser suportado em todos os ambientes de aplicações anfitriãs. Para verificar se o cliente atual suporta esta funcionalidade, pode invocar a API especificada para determinar o respetivo status. Um valor devolvido de
true
indica suporte para NAA, ao passofalse
que sugere que não é suportado.Testar a aplicação em vários ambientes: se se espera que a aplicação funcione tanto na vista Web como nas implementações do browser, recomendamos que teste a sua aplicação em ambos os ambientes de implementação para garantir que se comporta como esperado. Determinadas APIs que funcionam no browser podem não funcionar em vistas Web.
Exemplo de código
Nome do exemplo | Descrição | .NET | Node.js |
---|---|---|---|
Autenticação de aplicações aninhadas | Este exemplo mostra como criar um protocolo NAA para SPA incorporado em ambientes anfitriões, como o Teams, o Outlook e o Microsoft 365. | View | Exibir |