Web-App, die Web-APIs aufruft: Aufrufen einer Web-API

Da Sie nun über ein Token verfügen, können Sie eine geschützte Web-API aufrufen. In der Regel rufen Sie eine Downstream-API über den Controller oder die Seiten Ihrer Web-App auf.

Aufrufen einer geschützten Web-API

Das Aufrufen einer geschützten Web-API hängt von der verwendeten Programmiersprache und dem Framework ab:

Bei Verwendung von Microsoft.Identity.Web stehen Ihnen drei Optionen zum Aufrufen einer API zur Verfügung:

Option 1: Aufrufen von Microsoft Graph mit dem SDK

In diesem Szenario rufen Sie Microsoft Graph auf, indem Sie das Microsoft.Identity.Web.GraphServiceClient-NuGet-Paket hinzufügen und .AddMicrosoftGraph() in Startup.cs einschließen, wie in der Codekonfiguration angegeben. Anschließend können Sie den GraphServiceClient in Ihren Controller oder Seitenkonstruktor einfügen, um ihn in den Aktionen zu verwenden. Auf der folgenden Razor-Beispielseite wird das Foto des angemeldeten Benutzers angezeigt.

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

Ein vollständiges Beispiel finden Sie unter ASP.NET Core-Webanwendung, die Microsoft Graph aufruft.

Option 2: Aufrufen einer Downstream-Web-API mit der Hilfsklasse

Sie möchten eine andere Web-API als Microsoft Graph aufrufen. In diesem Fall fügen Sie AddDownstreamApi in Startup.cs ein, wie unter Codekonfiguration angegeben, und Sie können einen IDownstreamApi-Dienst direkt in den Controller oder Seitenkonstruktor einfügen und in den Aktionen verwenden:

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

CallWebApiForUserAsync verfügt auch über stark typisierte generische Überschreibungen, mit denen Sie ein Objekt direkt empfangen können. Beispielsweise wird mit der folgenden Methode eine Todo-Instanz empfangen, die eine stark typisierte Darstellung der von der Web-API zurückgegebenen JSON ist.

    // 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);
    }

Ein vollständiges Beispiel finden Sie unter ASP.NET Core Web-App, die eine API aufruft

Option 3: Aufrufen einer Downstream-Web-API ohne die Hilfsklasse

Sie haben sich entschieden, ein Token mit dem IAuthorizationHeaderProvider-Dienst manuell abzurufen, und jetzt müssen Sie das Token verwenden. In diesem Fall setzt der folgende Code den Beispielcode fort, den Sie hier finden: Web-App, die Web-APIs aufruft: Abrufen eines Tokens für die App. Der Code wird in den Aktionen der Web-App-Controller aufgerufen.

Nachdem Sie das Token abgerufen haben, können Sie es als Bearertoken zum Aufrufen der Downstream-API (in diesem Fall Microsoft Graph) verwenden.

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();
}

Hinweis

Sie können dasselbe Prinzip für den Aufruf jeder anderen Web-API verwenden.

Die meisten Azure-Web-APIs bieten ein SDK zur Vereinfachung des API-Aufrufs, wie es auch bei Microsoft Graph der Fall ist.

Nächste Schritte

  • Erfahren Sie mehr, indem Sie in der folgenden mehrteiligen Tutorialreihe eine ASP.NET Core-Webanwendung für die Anmeldung von Benutzern erstellen

  • Erkunden von Beispielen für Webanwendungen der Microsoft-Identitätsplattform