Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:
Inquilinos da força de trabalho (saiba mais)
Depois de criar um aplicativo cliente confidencial, você pode adquirir um token para o aplicativo chamando AcquireTokenForClient, passando o escopo e, opcionalmente, forçando uma atualização do token.
Escopos a solicitar
O escopo para solicitar um fluxo de credenciais de cliente é o nome do recurso seguido por /.default. Essa notação informa o Microsoft Entra ID para usar as permissões ao nível da aplicação declaradas estaticamente durante o registo da aplicação. Além disso, essas permissões de API devem ser concedidas por um administrador de locatário.
Aqui está um exemplo de definição dos escopos para a API da Web como parte da configuração em um arquivo de appsettings.json. Este exemplo é retirado do exemplo de código de daemon de consola .NET no GitHub.
{
"AzureAd": {
// Same AzureAd section as before.
},
"MyWebApi": {
"BaseUrl": "https://localhost:44372/",
"RelativePath": "api/TodoList",
"RequestAppToken": true,
"Scopes": [ "[Enter here the scopes for your web API]" ]
}
}
Recursos do Azure AD (v1.0)
O escopo usado para credenciais de cliente deve ser sempre o ID do recurso seguido por /.default.
Importante
Quando o MSAL solicita um token de acesso para um recurso que aceita um token de acesso da versão 1.0, o Microsoft Entra ID analisa o público desejado a partir do escopo solicitado, capturando tudo antes da última barra e utiliza-o como identificador do recurso.
Portanto, se, como o Azure SQL Database (https://database.windows.net), o recurso espera uma audiência que termina com uma barra (para o Azure SQL Database, https://database.windows.net/), precisarás solicitar um escopo de https://database.windows.net//.default. (Observe a barra dupla.) Ver também MSAL.NET edição #747: Resource url's trailing slash is omitted, which caused sql auth failure.
AcquireTokenForClient API
Para adquirir um token para o aplicativo, use AcquireTokenForClient ou seu equivalente, dependendo da plataforma.
Com Microsoft.Identity.Web, você não precisa adquirir um token. Você pode usar APIs de nível superior, como se vê em Chamando uma API da Web a partir de uma aplicação daemon. Se, no entanto, você estiver usando um SDK que exija um token, o trecho de código a seguir mostra como obter esse token.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;
// In the Program.cs, acquire a token for your downstream API
var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
ITokenAcquirer acquirer = tokenAcquirerFactory.GetTokenAcquirer();
AcquireTokenResult tokenResult = await acquirer.GetTokenForUserAsync(new[] { "https://graph.microsoft.com/.default" });
string accessToken = tokenResult.AccessToken;
Protocolo
Se você ainda não tem uma biblioteca para o idioma escolhido, convém usar o protocolo diretamente:
Primeiro caso: acessar a solicitação de token usando um segredo compartilhado
POST /{tenant}/oauth2/v2.0/token HTTP/1.1 //Line breaks for clarity.
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=A1b-C2d_E3f.H4i,J5k?L6m!N7o-P8q_R9s.T0u
&grant_type=client_credentials
Segundo caso: acessar a solicitação de token usando um certificado
POST /{tenant}/oauth2/v2.0/token HTTP/1.1 // Line breaks for clarity.
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_id=11112222-bbbb-3333-cccc-4444dddd5555
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=aaaaaaaa-0b0b-...
&grant_type=client_credentials
Para obter mais informações, consulte a documentação do protocolo: plataforma de identidade da Microsoft e o fluxo de credenciais do cliente OAuth 2.0.
Resolução de Problemas
Você usou o escopo resource/.default?
Se você receber uma mensagem de erro informando que usou um escopo inválido, provavelmente não usou o resource/.default escopo.
Esqueceu-se de dar o consentimento do administrador? Os aplicativos Daemon precisam disso!
Se você receber um erro de privilégios insuficientes para concluir a operação ao chamar a API, o administrador do locatário precisará conceder permissões ao aplicativo.
Se você não conceder consentimento de administrador para seu aplicativo, você se depara com o seguinte erro:
Failed to call the web API: Forbidden
Content: {
"error": {
"code": "Authorization_RequestDenied",
"message": "Insufficient privileges to complete the operation.",
"innerError": {
"request-id": "<guid>",
"date": "<date>"
}
}
}
Selecione uma das seguintes opções, dependendo da função.
Administrador de Aplicações na Cloud
Para um Administrador de Aplicações na Cloud, aceda a aplicações empresariais no centro de administração do Microsoft Entra. Selecione o registro do aplicativo e selecione Permissões na seção Segurança do painel esquerdo. Em seguida, selecione o botão grande rotulado Conceder consentimento de administrador para {Nome do locatário} (onde {Nome do locatário} é o nome do diretório).
Usuário padrão
Para um usuário padrão do seu locatário, peça a um administrador de aplicativo na nuvem para conceder consentimento de administrador ao aplicativo. Para fazer isso, forneça a seguinte URL para o administrador:
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
Na URL:
- Substitua
Enter_the_Tenant_Id_Herepelo ID do locatário ou nome do locatário (por exemplo,contoso.microsoft.com). -
Enter_the_Application_Id_Hereé o ID da aplicação (cliente) para a aplicação registada.
O erro AADSTS50011: No reply address is registered for the application pode ser exibido depois que você concede consentimento para o aplicativo usando a URL anterior. Este erro ocorre porque o aplicativo e a URL não têm um URI de redirecionamento. Isto pode ser ignorado.
Você está chamando sua própria API?
Se a sua aplicação daemon chamar a sua própria API Web e não conseguir adicionar uma permissão à inscrição da aplicação do daemon, será necessário Adicionar funções de aplicação à inscrição da API Web.
Próximos passos
Passe para o próximo artigo neste cenário, Chamando uma API da Web.