使用 AzureAD 中的所有可用范围生成令牌

Token is generating with all the available scopes in AzureAD

我在 Azure 上有以下设置,

  1. 托管APP
    • 在“公开 API”选项卡下添加了 3 个范围,即 abc、def、ghi
  2. 客户端APP
    • 在“API 权限”选项卡下添加了所有 3 个范围

现在,如果我从 Postman 为具有特定范围的客户端 APP 请求令牌,并且我通过 JWT.IO 解码令牌,那么我在“scp”声明中可用的所有 3 个范围。

OAuth 2.0 的 POSTMAN 设置,

我的期望是实现基于范围的授权,如果我请求 abc 范围的令牌,那么只有 ABC 应该出现在令牌中。

请检查这些:

  1. AFAIK,此时,天蓝色的广告访问令牌包括所有 所请求资源的授权委托权限, 代表 signed-in 用户授予。

  2. 如果您在应用程序的API权限blade下添加了权限并获得管理员同意,您将获得这些权限中的权限 令牌,即使您没有在令牌中明确指定 request. 如果不需要,请从那里删除权限 并且仅在没有时将范围保持在 Expose an API blade 下 需要直接授予。

  3. 它们可能不存在的唯一其他原因是,如果范围 不包括在条件访问中。即使任何一个范围是 请求包括在条件访问中,其余范围是 指向同意权限并存在于范围内。

  4. 请查看此 存档以了解 Azure Active Directory 中的新增功能? | Microsoft Docs 关于未请求但已同意的权限 如果它们会触发条件,将不再添加到令牌中 访问

    为了更好地理解,请查看此 SO ref - 是否可能 仅请求用户授予的范围的子集 同意 Azure AD OAuth2 隐式流程? @Philippe,请参阅应用程序给出示例的不同情况 已经授予 User.Read、Mail.Read 和 Files.Read.All,并且 客户的条件访问策略要求 multi-factor 访问邮件时的身份验证(但不是访问文件时), 并且用户尚未执行 MFA

请参阅 Microsoft 身份平台范围、权限和同意部分 example 1 , ex2 & client-credentials-grant-flow-and-default 说(不支持使用单独的应用程序权限(角色)发出客户端凭据请求。所有具有的应用程序角色(应用程序权限)被授予该网站 API 包含在返回的访问令牌中。

参考文献:

  1. Microsoft Azure AD JWT 令牌缺少范围信息 - 微软问答
  2. Microsoft 身份平台范围、权限和同意 - 微软身份平台 |微软文档