Azure AAD应用程序注册:JWT中没有可选声明



无法让可选声明出现在JWT ID令牌为我正在创建的asp.net核心API应用程序。为了进行测试,我使用POSTMAN通过其内置的Oauth2机制获得一个Bearer令牌。具体来说,我想要userprofile范围,属于MS Graph,这样我就可以访问用户的验证电子邮件地址和他们的姓和名。

我似乎对这个问题有一个相同的问题-第一部分,OP根本无法获得索赔(例如在调试或通过jwt.ms检查令牌时),而这一个。在我的场景中,我只开发一个web API,没有UI组件。期望请求将在用户上下文中发出,这样API就可以基于用户声明执行授权。

除了连接asp.net核心API之外,我还做了以下工作:

配置
  1. 注册API app(以下全部在Azure门户中完成)

    多承租者
  2. >
  3. 增加了所需的MS Graph API权限
  4. 为我的应用创建一个自定义作用域
  5. 在令牌配置中添加了所需的可选范围
  6. 将舱单
  7. 中的accessTokenAcceptedVersion设置为2
  8. 已注册客户端应用(同样,在Azure门户中,在同一租户中)

    • 添加了平台SPA(尚未使用,但这将是访问API的主要用例)和本机桌面(供POSTMAN使用)
    • 在API权限中,添加了我的API应用范围(如上)和MS Graph权限

使用POSTMAN进行测试

  • 设置一个请求到我的本地运行的API,使用POSTMAN的Oauth2授权方法,授权类型为Authorization Code (With PKCE),使用相关的url进行认证和令牌,客户端应用程序注册的客户端ID,并将范围设置为我的API的自定义范围。
  • 一切都在Authentication方面工作(我的API配置正确,与API应用程序注册相关联,JWT在API中正确地传递到我的上下文)。同意提示符显示了POSTMAN使用浏览器获得授权时期望的权限。
  • 但是JWT中不存在可选声明!

我还试过什么

  • openid email profile添加到请求的作用域(没有变化)
  • 尝试将作用域添加到客户端注册(但这是有点绝望,我明白这是资源,而不是客户端,决定索赔)
  • 阅读广泛:
    • 可选索赔文件
    • ID令牌doc
    • 身份平台权限/同意文档
    • SPA(及其他平台)认证场景doc

我希望看到从POSTMAN获得的Bearer令牌中的额外声明,因此即使没有运行我自己的API,我也可以看到它们不存在。所以我怀疑我错过了一个配置步骤,而不是我的代码中有一个错误。

我很清楚,我在这里错过和/或误解了一些东西,我被困住了。

正如评论中所讨论的,您需要为API配置访问令牌上的可选声明,而不是ID令牌。由于您在Postman.

中获得访问令牌。

最新更新