Webová aplikace, která volá webová rozhraní API: Volání webového rozhraní API

Teď, když máte token, můžete volat chráněné webové rozhraní API. Obvykle voláte podřízené rozhraní API z kontroleru nebo stránek vaší webové aplikace.

Volání chráněného webového rozhraní API

Volání chráněného webového rozhraní API závisí na zvoleném jazyce a rozhraní:

Pokud používáte Microsoft.Identity.Web, máte tři možnosti použití pro volání rozhraní API:

Možnost 1: Volání Microsoft Graphu pomocí sady SDK

V tomto scénáři zavoláte Microsoft Graph přidáním balíčku NuGet Microsoft.Identity.Web.GraphServiceClient a zahrnutím .AddMicrosoftGraph() do Startup.cs , jak je uvedeno v konfiguraci kódu. Potom můžete přímo vložit GraphServiceClient do kontroleru nebo konstruktoru stránky, který se použije v akcích. Následující příklad stránky Razor Page zobrazuje fotku přihlášeného uživatele.

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

Úplnou ukázku najdete v ASP.NET webové aplikaci Core, která volá Microsoft Graph.

Možnost 2: Volání podřízeného webového rozhraní API s pomocnou třídou

Chcete volat jiné webové rozhraní API než Microsoft Graph. V takovém případě přidáte AddDownstreamApi Startup.cs, jak je uvedeno v konfiguraci kódu, a můžete přímo vložit IDownstreamApi službu do kontroleru nebo konstruktoru stránky a použít ji v akcích:

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

Obsahuje CallWebApiForUserAsync také obecné přepsání silného typu, které umožňují přímo přijímat objekt. Například následující metoda obdrží Todo instanci, což je silné vyjádření JSON vrácené webovým rozhraním 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);
    }

Úplnou ukázku najdete v tématu ASP.NET Core webovou aplikaci, která volá rozhraní API.

Možnost 3: Volání podřízeného webového rozhraní API bez pomocné třídy

Rozhodli jste se token získat ručně pomocí IAuthorizationHeaderProvider služby a teď potřebujete token použít. V takovém případě následující kód pokračuje v ukázkovém kódu zobrazeném ve webové aplikaci, která volá webová rozhraní API: Získání tokenu pro aplikaci. Kód se volá v akcích kontrolerů webové aplikace.

Po získání tokenu ho použijte jako nosný token k volání podřízeného rozhraní API v tomto případě Microsoft Graphu.

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

Poznámka:

Stejný princip můžete použít k volání libovolného webového rozhraní API.

Většina webových rozhraní API Azure poskytuje sadu SDK, která zjednodušuje volání rozhraní API tak, jak je tomu u Microsoft Graphu.

Další kroky

  • Další informace o vytvoření webové aplikace ASP.NET Core, která přihlašuje uživatele v následující sérii kurzů s více částmi

  • Prozkoumání ukázek webových aplikací Microsoft Identity Platform