Udostępnij za pośrednictwem


Internetowy interfejs API, który wywołuje internetowe interfejsy API: uzyskiwanie tokenu dla aplikacji

Po utworzeniu obiektu aplikacji klienckiej użyj go do uzyskania tokenu, którego można użyć do wywołania internetowego interfejsu API.

Kod w kontrolerze

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 zapewnia, że tylko uwierzytelnione wywołania mogą używać internetowego interfejsu API.

[Authorize]
public class MyApiController : Controller
{
    /// <summary>
    /// The web API will accept only tokens 1) for users, 2) that have the `access_as_user` scope for
    /// this API.
    /// </summary>
    static readonly string[] scopeRequiredByApi = new string[] { "access_as_user" };

     static readonly string[] scopesToAccessDownstreamApi = new string[] { "api://MyTodolistService/access_as_user" };

     readonly IAuthorizationHeaderProvider authorizationHeaderProvider;

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

    [RequiredScopes(Scopes = scopesToAccessDownstreamApi)]
    public IActionResult Index()
    {
        // Get an authorization header.
        IAuthorizationHeaderProvider authorizationHeaderProvider = this.GetAuthorizationHeaderProvider();
        string[] scopes = new string[]{"user.read"};
        string authorizationHeader = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes);

        return await callTodoListService(authorizationHeader);
    }
}

Aby uzyskać szczegółowe informacje o metodzie callTodoListService , zobacz Internetowy interfejs API, który wywołuje internetowe interfejsy API: wywoływanie interfejsu API.

Następne kroki

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