You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Microsoft Identity平台,如何获取认证后访问令牌及相关作用域?

问题

在.NET 6的Program.cs中,我使用以下代码进行Azure AD认证:

string[] initialScopes = builder.Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' ');

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options => {
        builder.Configuration.GetSection("AzureAd").Bind(options);

        options.NonceCookie.SecurePolicy = CookieSecurePolicy.Always;
        options.CorrelationCookie.SecurePolicy = CookieSecurePolicy.Always;
    });

我希望通过Microsoft Identity平台认证流程,在认证后获取访问令牌,用于后续请求访问受保护资源,无需每次使用JavaScript获取新令牌。我已拥有clientId、tenantId和clientSecret。

参考以下代码示例,请问如何获取代码中的scopeRequiredByApi和scopesToAccessDownstreamApi的内容?

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

    private readonly ITokenAcquisition _tokenAcquisition;

    public MyApiController(ITokenAcquisition tokenAcquisition)
    {
        _tokenAcquisition = tokenAcquisition;
    }

    public async IActionResult Index()
    {
        HttpContext.VerifyUserHasAnyAcceptedScope(scopeRequiredByApi);

        string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(scopesToAccessDownstreamApi);
        return await callTodoListService(accessToken);
    }
}
解答

一、scopeRequiredByApi的获取方式

scopeRequiredByApi是当前API自身定义的权限范围,用于限制只有拥有该权限的用户才能访问此API。获取步骤:

  • 登录Azure门户,找到当前.NET 6项目对应的Azure AD应用注册。
  • 左侧菜单选择「公开API」,点击「添加范围」。
  • 按提示设置范围信息:
    • 范围名称:可自定义(比如示例的access_as_user,或read_data、write_data这类符合业务的名称)。
    • 谁能同意:根据需求选择「管理员和用户」或仅「管理员」。
    • 填写显示名称、描述等信息后完成创建。
  • 创建完成后,这个范围的名称就是scopeRequiredByApi要填入的值。

二、scopesToAccessDownstreamApi的获取方式

这个是你要访问的下游受保护API定义的权限范围,格式为api://<下游API的Client ID>/<权限范围名称>,获取步骤:

  • 登录Azure门户,找到下游受保护API对应的Azure AD应用注册。
  • 进入「公开API」页面,查看已创建的权限范围(未创建则按上述步骤新增)。
  • 复制「应用程序ID URI」(通常是api://<下游API的Client ID>或自定义域名)。
  • 将应用程序ID URI与权限范围名称拼接,得到类似示例api://MyTodolistService/access_as_user的字符串,填入scopesToAccessDownstreamApi即可。

额外注意事项

  • 需确保当前.NET 6应用(客户端应用)已被授予访问下游API对应权限范围的权限:在Azure门户的客户端应用「API权限」中添加下游API的权限,并完成管理员同意。
  • 示例代码中GetAccessTokenForUserAsync是异步方法,必须添加await关键字,同时方法要标记为async,否则会编译报错。

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:12:45