Delen via


Een web-app waarmee web-API's worden aangeroepen: een web-API aanroepen

Nu u een token hebt, kunt u een beveiligde web-API aanroepen. Meestal roept u een downstream-API aan vanaf de controller of pagina's van uw web-app.

Een beveiligde web-API aanroepen

Het aanroepen van een beveiligde web-API is afhankelijk van uw taal en het framework van keuze:

Wanneer u Microsoft.Identity.Web gebruikt, hebt u drie gebruiksopties voor het aanroepen van een API:

Optie 1: Microsoft Graph aanroepen met de SDK

In dit scenario roept u Microsoft Graph aan door het NuGet-pakket Microsoft.Identity.Web.GraphServiceClient toe te voegen, inclusief .AddMicrosoftGraph() in Startup.cs zoals opgegeven in de codeconfiguratie. Vervolgens kunt u de GraphServiceClient controller of paginaconstructor rechtstreeks injecteren om deze in de acties te gebruiken. Op de volgende voorbeeldpagina van Razor wordt de foto van de aangemelde gebruiker weergegeven.

[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;
  }
 }
}

Zie ASP.NET Core-web-app die Microsoft Graph aanroept voor een volledig voorbeeld.

Optie 2: een downstream-web-API aanroepen met de helperklasse

U wilt een andere web-API dan Microsoft Graph aanroepen. In dat geval voegt AddDownstreamApi u Startup.cs toe zoals opgegeven in de codeconfiguratie en kunt u rechtstreeks een IDownstreamApi service in uw controller of paginaconstructor injecteren en gebruiken in de acties:

[Authorize]
[AuthorizeForScopes(ScopeKeySection = "TodoList:Scopes")]
public class TodoListController : Controller
{
  private IDownstreamApi _downstreamApi;
  private const string ServiceName = "TodoList";

  public TodoListController(IDownstreamApi downstreamApi)
  {
    _downstreamApi = downstreamApi;
  }

  public async Task<ActionResult> Details(int id)
  {
    var value = await _downstreamApi.CallApiForUserAsync(
      ServiceName,
      options =>
      {
        options.RelativePath = $"me";
      });
      return View(value);
  }
}

De CallWebApiForUserAsync heeft ook sterk getypeerde algemene overschrijvingen waarmee u een object rechtstreeks kunt ontvangen. Met de volgende methode wordt bijvoorbeeld een Todo-exemplaar ontvangen. Dat is een sterk getypte weergave van de JSON die wordt geretourneerd door de web-API.

    // GET: TodoList/Details/5
    public async Task<ActionResult> Details(int id)
    {
        var value = await _downstreamApi.CallApiForUserAsync<object, Todo>(
            ServiceName,
            null,
            options =>
            {
                options.HttpMethod = HttpMethod.Get;
                options.RelativePath = $"api/todolist/{id}";
            });
        return View(value);
    }

Zie ASP.NET Core-web-app die een API aanroept voor een volledig voorbeeld

Optie 3: een downstream-web-API aanroepen zonder de helperklasse

U hebt besloten handmatig een token te verkrijgen met behulp van de service IAuthorizationHeaderProvider en u moet het token nu gebruiken. In dat geval is de volgende code een vervolg van de voorbeeldcode die wordt weergegeven in Een web-app die web-API's aanroept: een token verkrijgen voor de app. De code wordt aangeroepen in de acties van de web-app-controllers.

Nadat u het token hebt verkregen, gebruikt u het als Bearer-token om de downstream-API aan te roepen, in dit geval Microsoft Graph.

public async Task<IActionResult> Profile()
{
  // Acquire the access token.
  string[] scopes = new string[]{"user.read"};
  string authorizationHeader = await IAuthorizationHeaderProvider.GetAuthorizationHeaderForUserAsync(scopes);

  // Use the access token to call a protected web API.
  HttpClient httpClient = new HttpClient();
  client.DefaultRequestHeaders.Add("Authorization", authorizationHeader);

  var response = await httpClient.GetAsync($"{webOptions.GraphApiUrl}/beta/me");

  if (response.StatusCode == HttpStatusCode.OK)
  {
    var content = await response.Content.ReadAsStringAsync();

    dynamic me = JsonConvert.DeserializeObject(content);
    ViewData["Me"] = me;
  }

  return View();
}

Notitie

U kunt hetzelfde principe gebruiken om elke andere web-API aan te roepen.

De meeste Azure-web-API's bieden een SDK om het aanroepen van de API te vereenvoudigen, zoals het geval is bij Microsoft Graph.

Volgende stappen

  • Meer informatie door een ASP.NET Core-web-app te bouwen waarmee gebruikers worden aangemeld in de volgende reeks meerdelige zelfstudies

  • Voorbeelden van web-apps van Microsoft Identity Platform verkennen