Udostępnij za pośrednictwem


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

Dotyczy: Dzierżawcy siły roboczej Biały okrąg z szarym symbolem X. dzierżawcy zewnętrzni (White circle with a gray X symbol.dowiedz się więcej)

Utworzono obiekt aplikacji klienckiej. Teraz użyjesz go do uzyskania tokenu w celu wywołania API internetowego. 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 webowej, która wywołuje interfejsy API: Wywołanie API. Dzięki tym metodom pomocniczym 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, który dodasz do swojego żądania. Aby uzyskać nagłówek autoryzacji, wstrzyknij usługę IAuthorizationHeaderProvider przez wstrzykiwanie zależności w konstruktorze kontrolera (lub w konstruktorze strony, jeśli używasz Blazor), a następnie używaj jej w akcjach kontrolera. Ten interfejs zawiera metody, które tworzą ciąg zawierający protokół (Bearer, Pop, ...) i token. Aby uzyskać nagłówek autoryzacyjny w celu wywołania 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 działania HomeController, który pobiera token do wywołania 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, sprawdź 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.