Um aplicativo Web que chama APIs da Web: adquira um token para o aplicativo

Você criou seu objeto de aplicativo cliente. Agora, você o usa para adquirir um token para chamar uma API da Web. No ASP.NET ou ASP.NET Core, chamar uma API da Web é feito no controlador:

  • Obtenha um token para a API da Web usando o cache de token. Para obter esse token, você chama o método Microsoft Authentication Library (MSAL) AcquireTokenSilent (ou o equivalente em Microsoft.Identity.Web).
  • Chame a API protegida, passando o token de acesso para ela como um parâmetro.

Microsoft.Identity.Web adiciona métodos de extensão que fornecem serviços de conveniência para chamar o Microsoft Graph ou uma API da Web downstream. Esses métodos são explicados em detalhes em Um aplicativo Web que chama APIs da Web: Chamar uma API. Com esses métodos auxiliares, você não precisa adquirir manualmente um token.

Se, no entanto, você quiser adquirir manualmente um token, o código a seguir mostra um exemplo de uso de Microsoft.Identity.Web para fazer isso em um controlador doméstico. Ele chama o Microsoft Graph usando a API REST (em vez do SDK do Microsoft Graph). Normalmente, você não precisa obter um token, você precisa criar um cabeçalho de Autorização que você adiciona à sua solicitação. Para obter um cabeçalho de autorização, você injeta o IAuthorizationHeaderProvider serviço por injeção de dependência no construtor do controlador (ou no construtor de página se usar Blazor) e o usa nas ações do controlador. Esta interface tem métodos que produzem uma string contendo o protocolo (Bearer, Pop, ...) e um token. Para obter um cabeçalho de autorização para chamar uma API em nome do usuário, use (CreateAuthorizationHeaderForUserAsync). Para obter um cabeçalho de autorização para chamar uma API downstream em nome do próprio aplicativo, em um cenário de daemon, use (CreateAuthorizationHeaderForAppAsync).

Os métodos do controlador são protegidos por um [Authorize] atributo que garante que apenas usuários autenticados possam usar o aplicativo Web.

[Authorize]
public class HomeController : Controller
{
 readonly IAuthorizationHeaderProvider authorizationHeaderProvider;

 public HomeController(IAuthorizationHeaderProvider authorizationHeaderProvider)
 {
  this.authorizationHeaderProvider = authorizationHeaderProvider;
 }

 // Code for the controller actions (see code below)

}

ASP.NET Core é IAuthorizationHeaderProvider disponibilizado por injeção de dependência.

Aqui está o código simplificado para a ação do , que recebe um token para chamar o HomeControllerMicrosoft Graph:

[AuthorizeForScopes(Scopes = new[] { "user.read" })]
public async Task<IActionResult> Profile()
{
 // Acquire the access token.
 string[] scopes = new string[]{"user.read"};
 string accessToken = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes);

 // Use the access token to call a protected web API.
 HttpClient client = new HttpClient();
 client.DefaultRequestHeaders.Add("Authorization", accessToken);
 string json = await client.GetStringAsync(url);
}

Para entender melhor o código necessário para esse cenário, consulte a etapa de fase 2 (2-1-Web app Calls Microsoft Graph) do tutorial ms-identity-aspnetcore-webapp-tutorial .

O AuthorizeForScopes atributo na parte superior da ação do controlador (ou da página Razor se você usar um modelo Razor) é fornecido por Microsoft.Identity.Web. Ele garante que o usuário seja solicitado a dar consentimento, se necessário, e de forma incremental.

Existem outras variações complexas, tais como:

  • Chamando várias APIs.
  • Processamento de consentimento incremental e Acesso Condicional.

Essas etapas avançadas são abordadas no capítulo 3 do tutorial 3-WebApp-multi-APIs .

Próximos passos

Passe para o próximo artigo neste cenário, Chamar uma API da Web.