Condividi tramite


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

L'oggetto applicazione client è stato compilato. A questo momento, è possibile usarlo per acquisire un token per chiamare un'API Web. In ASP.NET o ASP.NET Core, la chiamata a un'API Web viene eseguita nel controller:

  • Ottenere un token per l'API Web usando la cache dei token. Per ottenere questo token, chiamare il metodo Microsoft Authentication Library (MSAL) AcquireTokenSilent o l'equivalente in Microsoft.Identity.Web.
  • Chiamare l'API protetta passando il token di accesso come parametro.

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 gli utenti autenticati possano usare l'app Web.

[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 rende IAuthorizationHeaderProvider disponibile l'inserimento delle dipendenze.

Ecco il codice semplificato per l'azione di HomeController, che ottiene un token per chiamare 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);
}

Per comprendere meglio il codice necessario per questo scenario, vedere il passaggio fase 2 (2-1-Web app Calls Microsoft Graph) dell'esercitazione ms-identity-aspnetcore-webapp-tutorial .

L'attributo AuthorizeForScopes sopra l'azione del controller (o della pagina Razor se si usa un modello Razor) viene fornito da Microsoft.Identity.Web. Garantisce che all'utente venga richiesto il consenso, se necessario, e in modo incrementale.

Esistono altre varianti complesse, ad esempio:

  • Chiamata di diverse API.
  • Elaborazione del consenso incrementale e dell'accesso condizionale.

Questi passaggi avanzati sono illustrati nel capitolo 3 dell'esercitazione 3-WebApp-multi-API.

Passaggi successivi

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