Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
A autenticação de aplicativo aninhado (NAA) tem suporte apenas em aplicativos de página única (SPA), como guias.
O NAA é um novo protocolo de autenticação para SPAs inseridos em ambientes de host, como Teams, Outlook e Microsoft 365. Ele simplifica o processo de autenticação para facilitar o logon único (SSO) em aplicativos aninhados em aplicativos host compatíveis. O modelo NAA dá suporte a uma identidade primária para o aplicativo host que inclui várias identidades de aplicativo para aplicativos aninhados. A Microsoft utiliza esse modelo em guias do Teams, aplicativos pessoais e suplementos do Office.
O modelo NAA oferece várias vantagens sobre o fluxo On-Behalf-Of (OBO):
O NAA exige que você use apenas a biblioteca MSAL.js. Você não precisa usar a
getAuthTokenfunção na biblioteca de cliente JavaScript do Teams (TeamsJS).Você pode chamar serviços como o Microsoft Graph com um token de acesso do código do cliente como um SPA. Não há necessidade de um servidor de camada intermediária.
Você pode usar o consentimento incremental e dinâmico para escopos (permissões).
Você não precisa pré-autorizar seus hosts, como Teams ou Microsoft 365, para chamar seus pontos de extremidade.
A tabela a seguir descreve a diferença entre o SSO e o NAA do Microsoft Entra do Teams:
Etapas necessárias para o desenvolvimento O Teams Tradicional Entra no SSO NAA Expor URI de redirecionamento Obrigatório Obrigatório Registrar API no Microsoft Entra ID Obrigatório Definir um escopo personalizado no Microsoft Entra ID Obrigatório Autorizar aplicativos cliente do Teams Obrigatório Revisar manifesto do aplicativo (anteriormente chamado de manifesto do aplicativo do Teams) Obrigatório Recomendado* Adquirir token de acesso por meio do SDK do TeamsJS Obrigatório Solicitar o consentimento do usuário para obter mais permissões Obrigatório Realizar uma troca OBO no servidor Obrigatório O administrador de TI pode bloquear o aplicativo ou consentir apenas determinadas permissões para o aplicativo no Microsoft Entra ID. Para evitá-lo, você deve incluir a ID do aplicativo e o recurso padrão no manifesto do aplicativo para que o administrador aprove as permissões no Centro de administração do Teams.
Casos de uso para NAA
| Cenário | Descrição |
|---|---|
| Consentindo com o SSO (e outras permissões) | Tom, um novo membro da equipe de design da Contoso, precisa usar o aplicativo Contoso em reuniões do Teams para colaborar em quadros de comunicações. Após o primeiro uso, uma caixa de diálogo solicita que Tom conceda permissões, incluindo a leitura de seu perfil para seu avatar (User.Read). Depois de dar consentimento, Tom pode usar a Contoso perfeitamente em reuniões futuras entre dispositivos. |
| Reautenticação ou Acesso Condicional autenticação avançada | Tom, ao trabalhar na Austrália, encontra um gatilho de acesso condicional que exige autenticação multifator (MFA) para acessar a Contoso no Teams. Uma caixa de diálogo informa a Tom que mais verificação é necessária, conduzindo-o pelo processo de MFA para continuar usando a Contoso. |
| Erros | Tom enfrenta um erro de entrada na Contoso devido a um problema ao recuperar informações da conta. Tom encontra um botão de repetição que solicita a reautenticação. No entanto, eles descobrem que o administrador do sistema restringiu o acesso à Contoso. |
Configurar NAA
Para configurar a autenticação aninhada, siga estas etapas:
- Registre seu SPA
- Adicionar agentes confiáveis
- Inicializar aplicativo cliente público
- Adquira seu primeiro token
- Chamar uma API
Registre seu SPA
Você deve criar um registro de aplicativo do Microsoft Entra ID para seu suplemento no portal do Azure. O registro do aplicativo deve ter um nome, tipo de conta com suporte e redirecionamento de SPA. Após o registro do seu aplicativo, o portal do Azure gera uma ID de registro do aplicativo Microsoft Entra. Se o suplemento exigir registro de aplicativo adicional além do NAA e do SSO, consulte registrar seu aplicativo de página única.
Adicionar agentes confiáveis
Para configurar a autenticação de aplicativo aninhado, seu aplicativo deve configurar ativamente um URI de redirecionamento para seu aplicativo. O URI de redirecionamento indica para a plataforma de identidade da Microsoft que seu aplicativo pode ser intermediado por hosts com suporte. O URI de redirecionamento do aplicativo deve ser do tipo Aplicativo de página única e estar em conformidade com o esquema a seguir:
brk-multihub://<your_domain>
Onde
-
brk-multihubpermite que sua autenticação seja intermediada por qualquer host compatível com o Microsoft 365 configurado para execução, como Teams, Outlook ou Microsoft365.com. - < > your_domain é o nome de domínio totalmente qualificado onde seu aplicativo está hospedado. Por exemplo, brk-multihub://contoso.com.
Seu domínio deve incluir apenas a origem e não seus subcaminhos. Por exemplo:
✔️ brk-multihub://myapp.teams.microsoft.com
❌ brk-multihub://myapp.teams.microsoft.com/go
Para obter mais informações sobre como atualizar seu aplicativo do Teams para ser executado no Outlook e no Microsoft365.com, consulte estender aplicativos do Teams no Microsoft 365.
Inicializar aplicativo cliente público
Observação
Para garantir uma autenticação bem-sucedida, inicialize o TeamsJS antes de inicializar o MSAL.
Inicialize a MSAL e obtenha uma instância do aplicativo cliente público 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;
}
);
}
Adquira seu primeiro token
Os tokens adquiridos pelo MSAL.js por meio da autenticação de aplicativo aninhado são emitidos para sua ID de registro do aplicativo Microsoft Entra. MSAL.js lida com a aquisição de token para autenticação de usuário. Ele tenta obter um token de acesso silenciosamente. Se isso não for bem-sucedido, ele solicitará o consentimento do usuário. O token é então usado para chamar a API do Graph Microsoft ou outros recursos protegidos pelo Microsoft Entra ID. Ao contrário do fluxo OBO, você não precisa pré-autorizar seus hosts a chamar os pontos de extremidade.
Para adquirir um token, siga estas etapas:
Use MSAL.js para adquirir tokens para sua ID do aplicativo. Para obter mais informações, consulte adquirir e usar um token de acesso.
Use
getActiveAccounta API para verificar se há uma conta ativa para chamar opublicClientApplication. Se não houver nenhuma conta ativa, tente recuperar uma do cache comgetAccount, usando parâmetros de filtro adicionais, comotenantID,homeAccountIdeloginHintda interface de contexto.Observação
A
homeAccountIdpropriedade é equivalente auserObjectIdem TeamsJS.Chamada
publicClientApplication.acquireTokenSilent(accessTokenRequest)para adquirir o token silenciosamente sem interação do usuário.accessTokenRequestEspecifica os escopos para os quais o token de acesso é solicitado. A NAA dá suporte ao consentimento incremental e dinâmico. Certifique-se de sempre solicitar os escopos mínimos necessários para que seu código conclua sua tarefa.Se nenhuma conta disponível, MSAL.js retornará um
InteractionRequiredAuthError. ChamepublicClientApplication.acquireTokenPopup(accessTokenRequest)para exibir uma caixa de diálogo interativa para o usuário.acquireTokenSilentpoderá falhar se o token expirar ou se o usuário não consentir com todos os escopos solicitados.O trecho de código a seguir mostra um exemplo para acessar 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, use-o para chamar a API. Isso garante que a API seja chamada com um token válido para fazer solicitações autenticadas ao servidor.
O exemplo a seguir mostra como fazer uma solicitação autenticada à API do Graph para acessar 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é-busca de token para autenticação de aplicativo aninhado (NAA)
Para melhorar o desempenho e reduzir a latência de autenticação, a autenticação de aplicativo aninhado (NAA) dá suporte à pré-busca de token. Esse recurso permite que o host adquira tokens de autenticação proativamente antes da inicialização do aplicativo, permitindo acesso mais rápido a recursos protegidos.
Como habilitar a pré-busca de token
Para habilitar a pré-busca de token, atualize o manifesto do aplicativo do Teams para a versão 1.22 ou posterior e inclua a nestedAppAuthInfo seção dentro webApplicationInfo.
{
"webApplicationInfo": {
"id": "33333ddd-0000-0000-0000-88888757bbbb",
"resource": "api://app.com/botid-33333ddd-0000-0000-0000-88888757bbbb",
"nestedAppAuthInfo": [
{
"redirectUri": "brk-multihub://app.com",
"scopes": ["openid", "profile", "offline_access"],
"claims": "{\"access_token\":{\"xms_cc\":{\"values\":[\"CP1\"]}}}"
}
]
}
}
Importante
- O valor de webApplicationInfo.id deve corresponder à ID do cliente do registro de Microsoft Entra ID do aplicativo. Essa é a mesma ID de cliente que o aplicativo usa ao fazer solicitações reais de token NAA. O host usa essa ID para iniciar o processo de pré-busca de token.
- Os valores em webApplicationInfo.id e todos os campos dentro de nestedAppAuthInfo devem corresponder exatamente aos parâmetros usados na solicitação de token NAA de runtime do aplicativo. Qualquer incompatibilidade, como diferenças em escopos, URIs de redirecionamento ou declarações, impedirá que o host sirva o token do cache.
- Os tokens pré-buscados são armazenados na memória por um curto período e devem ser usados somente durante o carregamento inicial do aplicativo. Se o aplicativo tentar buscar um token mais tarde, como em resposta a uma ação do usuário, o token pré-buscado poderá não estar mais disponível. Nesses casos, o aplicativo deve iniciar uma nova solicitação de token usando fluxos de autenticação padrão.
Como funciona
Quando a pré-busca de token está habilitada, o ambiente do host tenta adquirir e armazenar em cache os tokens necessários antes que o aplicativo seja renderizado. Esses tokens são armazenados na memória e disponibilizados para o aplicativo imediatamente após a inicialização.
Esse comportamento é semelhante ao recurso de pré-busca no modelo de SSO herdado do Teams, em que a API era disparada automaticamente durante o carregamento da getAuthToken tabulação. Com a Autenticação de Aplicativos Aninhados (NAA), essa funcionalidade é introduzida por meio da configuração de manifesto, melhorando o desempenho sem exigir uma troca de token de back-end.
Benefícios da pré-busca de token no NAA
- Melhore o desempenho reduzindo os atrasos de autenticação durante a inicialização do aplicativo
- Habilitar logon único (SSO) em aplicativos aninhados sem entradas repetidas
Observação
No momento, a pré-busca de token tem suporte apenas nos clientes da Web e da área de trabalho do Microsoft Teams.
Práticas recomendadas
Use autenticação silenciosa sempre que possível: MSAL.js fornece o método, que lida com a
acquireTokenSilentrenovação de token fazendo solicitações silenciosas de token sem solicitar ao usuário. Primeiro, o método procura um token válido em cache no armazenamento do navegador. Se não encontrar uma, a biblioteca faz uma solicitação silenciosa ao Microsoft Entra ID e, se houver uma sessão de usuário ativa (determinada por um cookie definido no navegador no domínio do Microsoft Entra), o Microsoft Entra ID retornará um novo token. A biblioteca não invoca automaticamente oacquireTokenSilentmétodo. Recomendamos que você chameacquireTokenSilentseu aplicativo antes de fazer uma chamada à API para obter um token válido.Em determinados casos, a tentativa de obter o token usando o
acquireTokenSilentmétodo falha. Por exemplo, quando há uma sessão de usuário expirada com o Microsoft Entra ID ou uma alteração de senha pelo usuário do aplicativo,acquireTokenSilentfalha. Chame o método de token de aquisição interativo (acquireTokenPopup).Tenha um fallback: os fluxos NAA oferecem compatibilidade em todo o ecossistema da Microsoft. No entanto, seu aplicativo pode aparecer em clientes de nível inferior ou herdados que não são atualizados para dar suporte à NAA. Nesses casos, seu aplicativo não pode dar suporte ao SSO contínuo e talvez seja necessário invocar APIs especiais para interagir com o usuário para abrir caixas de diálogo de autenticação. Para obter mais informações, consulte Habilitar o SSO para o aplicativo de guia.
Observação
Você não deve usar o NAA se estiver usando um provedor de identidade que não seja do Microsoft Entra. Em vez disso, você pode usar a autenticação pop-up.
Suporte para NAA: o NAA pode não ter suporte em todos os ambientes de aplicativo host. Para verificar se o cliente atual dá suporte a esse recurso, você pode invocar a API especificada para determinar seu status. Um valor retornado de
trueindica suporte para NAA, emborafalsesugira que não há suporte.Teste seu aplicativo em vários ambientes: se seu aplicativo deve funcionar em implantações de modo de exibição da Web e navegador, recomendamos testar seu aplicativo em ambos os ambientes de implantação para garantir que ele se comporte conforme o esperado. Determinadas APIs que funcionam no navegador podem não operar em exibições da Web.
Exemplo de código
| Nome do exemplo | Descrição | .NET | Node.js |
|---|---|---|---|
| Autenticação de aplicativo aninhado | Este exemplo mostra o SSO (logon único) do Microsoft Entra em uma guia do Microsoft Teams, utilizando o fluxo OBO (Em Nome de) para chamar a API do Graph em nome do usuário. | View | Exibir |