Ett webb-API som anropar webb-API:er: Anropa ett API
När du har en token kan du anropa ett skyddat webb-API. Du anropar vanligtvis underordnade API:er från kontrollanten eller sidorna i webb-API:et.
Styrenhetskod
När du använder Microsoft.Identity.Web har du tre användningsscenarier:
- Alternativ 1: Anropa Microsoft Graph med SDK:n
- Alternativ 2: Anropa ett underordnat webb-API med hjälpklassen
- Alternativ 3: Anropa ett underordnat webb-API utan hjälpklassen
Alternativ 1: Anropa Microsoft Graph med programvaru-utvecklingspaketet (SDK)
I det här scenariot har du lagt till NuGet-paketet Microsoft.Identity.Web.GraphServiceClient och lagt till .AddMicrosoftGraph()
i Startup.cs som anges i Kodkonfiguration, och du kan direkt mata in i kontrollanten GraphServiceClient
eller sidkonstruktorn för användning i åtgärderna. Följande exempel på Razor-sidan visar bilden på den inloggade användaren.
[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;
}
}
}
Alternativ 2: Anropa ett underordnat webb-API med hjälpklassen
I det här scenariot har du lagt till .AddDownstreamApi()
i Startup.cs som anges i Kodkonfiguration, och du kan mata in en IDownstreamWebApi
tjänst direkt i kontrollanten eller sidkonstruktorn och använda den i åtgärderna:
[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);
}
Metoden CallApiForUserAsync
har också starkt inskrivna allmänna åsidosättningar som gör att du kan ta emot ett objekt direkt. Följande metod tog till exempel emot en Todo
instans, som är en starkt skriven representation av JSON som returneras av webb-API:et.
// 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);
}
Alternativ 3: Anropa ett underordnat webb-API utan hjälpklassen
Om du har valt att hämta ett auktoriseringshuvud med hjälp av IAuthorizationHeaderProvider
gränssnittet fortsätter följande kod exempelkoden som visas i ett webb-API som anropar webb-API:er: Hämta en token för appen. Koden anropas i api-kontrollanternas åtgärder. Det anropar ett underordnat API med namnet todolist.
När du har hämtat token använder du den som en ägartoken för att anropa det underordnade API:et.
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");
// ...
}
Nästa steg
Läs mer genom att skapa en ASP.NET Core-webbapp som loggar in användare i följande självstudieserie i flera delar
Utforska Microsofts identitetsplattform webb-API-exempel