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 ter um token, você pode chamar uma API da Web protegida. Você costuma chamar as APIs de jusante a partir do controlador ou das páginas da sua API web.
Código do controlador
Quando você usa Microsoft.Identity.Web, você tem três cenários de uso:
- Opção 1: Chamar o Microsoft Graph com o SDK
- Opção 2: Invocar uma API da Web a jusante com a classe auxiliar
- Opção 3: Chamar uma API da Web downstream sem a classe auxiliar
Opção 1: Chamar o Microsoft Graph com o SDK
Nesse cenário, adicionou o pacote NuGet Microsoft.Identity.Web.GraphServiceClient e adicionou .AddMicrosoftGraph() no Startup.cs conforme especificado na configuração de código, e pode injetá-lo diretamente no controlador ou construtor de página para uso nas ações. A página Razor de exemplo a seguir exibe a foto do usuário conectado.
[Authorize]
[AuthorizeForScopes(Scopes = new[] { "user.read" })]
public class IndexModel : PageModel
{
private readonly GraphServiceClient _graphServiceClient;
public IndexModel(GraphServiceClient graphServiceClient)
{
_graphServiceClient = graphServiceClient;
}
public async Task OnGet()
{
var user = await _graphServiceClient.Me.GetAsync();
try
{
using (var photoStream = await _graphServiceClient.Me.Photo.Content.GetAsync())
{
byte[] photoByte = ((MemoryStream)photoStream).ToArray();
ViewData["photo"] = Convert.ToBase64String(photoByte);
}
ViewData["name"] = user.DisplayName;
}
catch (Exception)
{
ViewData["photo"] = null;
}
}
}
Opção 2: Chamar uma API Web subsequente com a classe auxiliar
Neste cenário, adicionaste .AddDownstreamApi() em Startup.cs conforme especificado em Configuração de Código, e podes injetar diretamente um IDownstreamWebApi serviço no teu controlador ou construtor de página e utilizá-lo nas ações:
[Authorize]
[AuthorizeForScopes(ScopeKeySection = "TodoList:Scopes")]
public class TodoListController : Controller
{
private IDownstreamWebApi _downstreamWebApi;
private const string ServiceName = "TodoList";
public TodoListController(IDownstreamWebApi downstreamWebApi)
{
_downstreamWebApi = downstreamWebApi;
}
public async Task<ActionResult> Details(int id)
{
var value = await _downstreamWebApi.CallApiForUserAsync(
ServiceName,
options =>
{
options.RelativePath = $"me";
});
return View(value);
}
O CallApiForUserAsync método também tem substituições genéricas fortemente tipadas que permitem que você receba diretamente um objeto. Por exemplo, o método seguinte recebeu uma instância Todo, que é uma representação fortemente tipada do JSON retornado pela API web.
// GET: TodoList/Details/5
public async Task<ActionResult> Details(int id)
{
var value = await _downstreamWebApi.CallApiForUserAsync<object, Todo>(
ServiceName,
null,
options =>
{
options.HttpMethod = HttpMethod.Get;
options.RelativePath = $"api/todolist/{id}";
});
return View(value);
}
Opção 3: Chamar uma API da Web downstream sem a classe auxiliar
Se você decidiu obter um cabeçalho de autorização usando a IAuthorizationHeaderProvider interface, o código a seguir continua o código de exemplo mostrado em Uma API da Web que chama APIs da Web: Adquira um token para o aplicativo. O código é chamado nas ações dos controladores de API. Ele chama uma API downstream chamada todolist.
Depois de adquirir o token, use-o como um token de portador para chamar a API downstream.
private async Task CallTodoListService(string accessToken)
{
// After the token has been returned by Microsoft.Identity.Web, add it to the HTTP authorization header before making the call to access the todolist service.
authorizationHeader = await authorizationHeaderProvider.GetAuthorizationHeaderForUserAsync(scopes);
_httpClient.DefaultRequestHeaders["Authorization"] = authorizationHeader;
// Call the todolist service.
HttpResponseMessage response = await _httpClient.GetAsync(TodoListBaseAddress + "/api/todolist");
// ...
}