Udostępnij za pośrednictwem


Aplikacja internetowa, która wywołuje internetowe interfejsy API: wywoływanie internetowego interfejsu API

Teraz, gdy masz token, możesz wywołać chroniony internetowy interfejs API. Zazwyczaj wywołujesz podrzędny interfejs API z kontrolera lub stron aplikacji internetowej.

Wywoływanie chronionego internetowego interfejsu API

Wywoływanie chronionego internetowego interfejsu API zależy od wybranego języka i platformy:

W przypadku korzystania z aplikacji Microsoft.Identity.Web dostępne są trzy opcje użycia do wywoływania interfejsu API:

Opcja 1. Wywoływanie programu Microsoft Graph za pomocą zestawu SDK

W tym scenariuszu wywołasz program Microsoft Graph, dodając pakiet NuGet Microsoft.Identity.Web.GraphServiceClient i włączając .AddMicrosoftGraph() go w Startup.cs zgodnie z konfiguracją kodu. Następnie można bezpośrednio wstrzyknąć element GraphServiceClient do kontrolera lub konstruktora strony, aby użyć go w akcjach. Poniższa przykładowa strona Razor wyświetla zdjęcie zalogowanego użytkownika.

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

Pełny przykład można znaleźć w ASP.NET Core aplikacji internetowej wywołującej program Microsoft Graph.

Opcja 2. Wywoływanie podrzędnego internetowego interfejsu API za pomocą klasy pomocniczej

Chcesz wywołać internetowy interfejs API inny niż Microsoft Graph. W takim przypadku należy dodać AddDownstreamApi Startup.cs, jak określono w konfiguracji kodu, i można bezpośrednio wstrzyknąć usługę IDownstreamApi w kontrolerze lub konstruktorze strony i użyć jej w akcjach:

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

Obiekt CallWebApiForUserAsync ma również silnie typizowane przesłonięcia ogólne, które umożliwiają bezpośrednie odbieranie obiektu. Na przykład następująca metoda odbiera wystąpienie, które jest silnie typizowaną reprezentacją Todo kodu JSON zwróconego przez internetowy interfejs 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);
    }

Pełny przykład można znaleźć w ASP.NET Core aplikacji internetowej wywołującej interfejs API

Opcja 3. Wywoływanie podrzędnego internetowego interfejsu API bez klasy pomocniczej

Podjęto decyzję o ręcznym uzyskaniu tokenu IAuthorizationHeaderProvider przy użyciu usługi i teraz musisz użyć tokenu. W takim przypadku poniższy kod kontynuuje przykładowy kod pokazany w aplikacji internetowej, która wywołuje internetowe interfejsy API: Uzyskiwanie tokenu dla aplikacji. Kod jest wywoływany w akcjach kontrolerów aplikacji internetowej.

Po uzyskaniu tokenu użyj go jako tokenu elementu nośnego, aby wywołać podrzędny interfejs API, w tym przypadku program 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();
}

Uwaga

Tę samą zasadę można użyć do wywoływania dowolnego internetowego interfejsu API.

Większość internetowych interfejsów API platformy Azure udostępnia zestaw SDK, który upraszcza wywoływanie interfejsu API, tak jak w przypadku programu Microsoft Graph.

Następne kroki

  • Dowiedz się więcej, tworząc aplikację internetową platformy ASP.NET Core, która loguje użytkowników w poniższej serii samouczków wieloczęściowych

  • Eksplorowanie przykładów aplikacji internetowej Platforma tożsamości Microsoft