API Web che chiama le API Web: Acquisire un token per l'app

Dopo aver creato un oggetto applicazione client, usarlo per acquisire un token che è possibile usare per chiamare un'API Web.

Codice nel controller

Microsoft.Identity.Web aggiunge metodi di estensione che forniscono servizi pratici per chiamare Microsoft Graph o un'API Web downstream. Questi metodi sono illustrati in dettaglio in Un'app Web che chiama LE API Web: Chiamare un'API. Con questi metodi helper non è necessario acquisire manualmente un token.

Se, tuttavia, si vuole acquisire manualmente un token, il codice seguente mostra un esempio di utilizzo di Microsoft.Identity.Web per farlo in un controller home. Chiama Microsoft Graph usando l'API REST (anziché Microsoft Graph SDK). In genere, non è necessario ottenere un token, è necessario compilare un'intestazione di autorizzazione aggiunta alla richiesta. Per ottenere un'intestazione di autorizzazione, inserire il IAuthorizationHeaderProvider servizio tramite l'inserimento delle dipendenze nel costruttore del controller (o il costruttore di pagina se si usa Blazor) e lo si usa nelle azioni del controller. Questa interfaccia include metodi che producono una stringa contenente il protocollo (Bearer, Pop, ...) e un token. Per ottenere un'intestazione di autorizzazione per chiamare un'API per conto dell'utente, usare (CreateAuthorizationHeaderForUserAsync). Per ottenere un'intestazione di autorizzazione per chiamare un'API downstream per conto dell'applicazione stessa, usare (CreateAuthorizationHeaderForAppAsyncin uno scenario daemon).

I metodi controller sono protetti da un [Authorize] attributo che garantisce che solo le chiamate autenticate possano usare l'API Web.

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

Per informazioni dettagliate sul callTodoListService metodo, vedere UN'API Web che chiama LE API Web: Chiamare un'API.

Passaggi successivi

Passare all'articolo successivo in questo scenario, Chiamare un'API.