Delen via


Een web-API die web-API's aanroept: een token verkrijgen voor de app

Nadat u een clienttoepassingsobject hebt gemaakt, gebruikt u dit om een token te verkrijgen dat u kunt gebruiken om een web-API aan te roepen.

Code in de controller

Microsoft.Identity.Web voegt uitbreidingsmethoden toe die handige services bieden voor het aanroepen van Microsoft Graph of een downstream-web-API. Deze methoden worden uitgebreid beschreven in een web-app die web-API's aanroept: een API aanroepen. Met deze helpermethoden hoeft u geen token handmatig te verkrijgen.

Als u echter handmatig een token wilt verkrijgen, ziet u in de volgende code een voorbeeld van het gebruik van Microsoft.Identity.Web in een homecontroller. Microsoft Graph wordt aangeroepen met behulp van de REST API (in plaats van de Microsoft Graph SDK). Meestal hoeft u geen token op te halen. U moet een autorisatieheader maken die u aan uw aanvraag toevoegt. Als u een autorisatieheader wilt ophalen, injecteert u de IAuthorizationHeaderProvider service door afhankelijkheidsinjectie in de constructor van uw controller (of de paginaconstructor als u Blazor gebruikt) en gebruikt u deze in de controlleracties. Deze interface bevat methoden die een tekenreeks produceren die het protocol bevat (Bearer, Pop, ...) en een token. Als u een autorisatieheader wilt ophalen om namens de gebruiker een API aan te roepen, gebruikt u (CreateAuthorizationHeaderForUserAsync). Als u een autorisatieheader wilt ophalen om een downstream-API namens de toepassing zelf aan te roepen, gebruikt u (CreateAuthorizationHeaderForAppAsyncin een daemon-scenario).

De controllermethoden worden beveiligd door een [Authorize] kenmerk dat ervoor zorgt dat alleen geverifieerde aanroepen de web-API kunnen gebruiken.

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

Zie een web-API die web-API's aanroept: een API aanroepen voor meer informatie over de callTodoListService methode.

Volgende stappen

Ga verder met het volgende artikel in dit scenario, roep een API aan.