调用 Web API 的 Web API:获取应用的令牌

构建客户端应用程序对象后,使用它来获取可用于调用 Web API 的令牌。

控制器中的代码

Microsoft.Identity.Web 添加了扩展方法,这些方法为调用 Microsoft Graph 或下游 Web API 提供便利服务。 若要详细了解这些方法,请参阅调用 Web API 的 Web 应用:调用 API。 使用这些帮助程序方法,你无需手动获取令牌。

但是,如果你确实想要手动获取令牌,可以通过以下代码以示例方式了解如何使用 Microsoft.Identity.Web 在主控制器中执行此操作。 它使用 REST API(而不是 Microsoft Graph SDK)调用 Microsoft Graph。 通常,无需获取令牌,而是需要生成添加到请求的授权标头。 若要获取授权标头,请通过依赖项注入将 IAuthorizationHeaderProvider 服务注入的构造函数控制器(如果使用 Blazor,则注入页面构造函数),并在控制器操作中使用它。 此接口提供了方法来生成包含协议(持有者、Pop 等)和一个令牌的字符串。 若要获取授权标头来代表用户调用 API,请使用 (CreateAuthorizationHeaderForUserAsync)。 若要获取授权标头来代表应用程序本身调用下游 API,请在守护程序方案中使用 (CreateAuthorizationHeaderForAppAsync)。

控制器方法受 [Authorize] 属性的保护,该属性确保只有经过身份验证的调用可使用 Web 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[]{"https://microsoftgraph.chinacloudapi.cn/user.read"};
        string authorizationHeader = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes);

        return await callTodoListService(authorizationHeader);
    }
}

若要了解关于 callTodoListService 方法的详细信息,请参阅用于调用 Web API 的 Web API:调用 API

后续步骤

转到此方案中的下一篇文章:调用 API