Udostępnij za pośrednictwem


Aplikacja internetowa, która wywołuje internetowe interfejsy API: uzyskiwanie tokenu dla aplikacji

Utworzono obiekt aplikacji klienckiej. Teraz użyjesz go do uzyskania tokenu w celu wywołania internetowego interfejsu API. W ASP.NET lub ASP.NET Core wywoływanie internetowego interfejsu API odbywa się w kontrolerze:

  • Pobierz token dla internetowego interfejsu API przy użyciu pamięci podręcznej tokenów. Aby uzyskać ten token, należy wywołać metodę Microsoft Authentication Library (MSAL) AcquireTokenSilent (lub równoważną w pliku Microsoft.Identity.Web).
  • Wywołaj chroniony interfejs API, przekazując do niego token dostępu jako parametr.

Microsoft.Identity.Web dodaje metody rozszerzenia, które zapewniają wygodne usługi do wywoływania programu Microsoft Graph lub podrzędnego internetowego interfejsu API. Te metody zostały szczegółowo wyjaśnione w aplikacji internetowej, która wywołuje internetowe interfejsy API: wywoływanie interfejsu API. W przypadku tych metod pomocnika nie trzeba ręcznie uzyskiwać tokenu.

Jeśli jednak chcesz ręcznie uzyskać token, poniższy kod przedstawia przykład użycia pliku Microsoft.Identity.Web do tego w kontrolerze macierzystym. Wywołuje program Microsoft Graph przy użyciu interfejsu API REST (zamiast zestawu Microsoft Graph SDK). Zazwyczaj nie musisz pobierać tokenu, musisz utworzyć nagłówek autoryzacji dodany do żądania. Aby uzyskać nagłówek autoryzacji, należy wstrzyknąć usługę IAuthorizationHeaderProvider przez wstrzykiwanie zależności w konstruktorze kontrolera (lub konstruktorze strony, jeśli używasz platformy Blazor) i używać jej w akcjach kontrolera. Ten interfejs zawiera metody, które tworzą ciąg zawierający protokół (Bearer, Pop, ...) i token. Aby uzyskać nagłówek autoryzacji w celu wywołania interfejsu API w imieniu użytkownika, użyj (CreateAuthorizationHeaderForUserAsync). Aby uzyskać nagłówek autoryzacji w celu wywołania podrzędnego interfejsu API w imieniu samej aplikacji, w scenariuszu demona użyj (CreateAuthorizationHeaderForAppAsync).

Metody kontrolera są chronione przez [Authorize] atrybut, który gwarantuje, że tylko uwierzytelnieni użytkownicy mogą używać aplikacji internetowej.

[Authorize]
public class HomeController : Controller
{
 readonly IAuthorizationHeaderProvider authorizationHeaderProvider;

 public HomeController(IAuthorizationHeaderProvider authorizationHeaderProvider)
 {
  this.authorizationHeaderProvider = authorizationHeaderProvider;
 }

 // Code for the controller actions (see code below)

}

ASP.NET Core udostępnia IAuthorizationHeaderProvider przez wstrzykiwanie zależności.

Oto uproszczony kod akcji HomeControllerprogramu , który pobiera token do wywołania programu Microsoft Graph:

[AuthorizeForScopes(Scopes = new[] { "user.read" })]
public async Task<IActionResult> Profile()
{
 // Acquire the access token.
 string[] scopes = new string[]{"user.read"};
 string accessToken = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes);

 // Use the access token to call a protected web API.
 HttpClient client = new HttpClient();
 client.DefaultRequestHeaders.Add("Authorization", accessToken);
 string json = await client.GetStringAsync(url);
}

Aby lepiej zrozumieć kod wymagany w tym scenariuszu, zobacz krok krok 2 (2-1-Web app Calls Microsoft Graph) w samouczku ms-identity-aspnetcore-webapp-tutorial .

Atrybut AuthorizeForScopes na górze akcji kontrolera (lub strony Razor, jeśli używasz szablonu Razor) jest udostępniany przez Microsoft.Identity.Web. Gwarantuje to, że użytkownik zostanie poproszony o zgodę w razie potrzeby i przyrostowo.

Istnieją inne złożone odmiany, takie jak:

  • Wywoływanie kilku interfejsów API.
  • Przetwarzanie zgody przyrostowej i dostępu warunkowego.

Te zaawansowane kroki zostały omówione w rozdziale 3 samouczka 3-WebApp-multi-APIs .

Następne kroki

Przejdź do następnego artykułu w tym scenariuszu, Wywołaj internetowy interfejs API.