asp.net-core - Azure AAD 应用程序注册 : optional claims absent from JWT

标签 asp.net-core azure-active-directory jwt authorization

对于我正在创建的 ASP.NET Core API 应用,我无法在 JWT ID token 中显示可选声明。为了进行测试,我使用 POSTMAN 通过其内置的 Oauth2 机制获取不记名 token 。具体来说,我想要属于 MS Graph 的 userprofile 范围,以便我可以访问用户经过验证的电子邮件地址及其名字和姓氏。

我似乎遇到了与 this question 相同的问题- 第一部分,OP 根本无法让声明出现(例如,在调试中或通过 jwt.ms 检查 token 时),以及 this one 。在我的场景中,我仅开发一个 Web API,没有 UI 组件。预期请求将在用户上下文中发出,以便 API 可以根据用户声明执行授权。

除了连接 asp.net core API 之外,我还完成了以下操作:

配置

  1. 注册了 API 应用(所有后续操作均在 Azure 门户中完成)

    • Multi-Tenancy
    • 添加了所需的 MS Graph API 权限
    • 为我的应用创建了自定义范围
    • 在 token 配置中添加了所需的可选范围
    • 在 list 中将 accessTokenAcceptedVersion 设置为 2
  2. 注册了一个客户端应用(同样,在 Azure 门户中的同一租户中)

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

使用 POSTMAN 进行测试

  • 使用 POSTMAN 的 Oauth2 授权方法(授权类型授权代码(带 PKCE))设置对本地运行的 API 的请求,并使用相关的 URL 进行身份验证和 token 、客户端应用注册的客户端 ID,以及将范围设置为我的 API 的自定义范围。
  • 身份验证方面一切正常(我的 API 配置正确,与 API 应用注册相关联,并且 JWT 正确地传递到 API 中的我的上下文)。当POSTMAN使用浏览器进行身份验证时,同意提示会显示预期的权限。
  • 但是 JWT 中不存在可选声明!

我还尝试过什么

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

我很清楚我错过了和/或误解了一些东西,而且我陷入了困境。

最佳答案

正如评论中所讨论的,您需要在 API 的访问 token (而不是 ID token )上配置可选声明。因为您在 Postman 中获得了访问 token 。

关于asp.net-core - Azure AAD 应用程序注册 : optional claims absent from JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65746450/

相关文章:

c# - 环境包括与环境名称属性之间的差异

asp.net-mvc - 为 dnx rc2 运行 MVC 6 ASP.NET 5 本地化示例

asp.net-core - Asp.net Core 中的用户主机地址

powershell - 与 Microsoft Azure AD 模块 PowerShell 和 Microsoft Azure Powershell 的不同之处

asp.net-core - 找不到类型或命名空间名称 'IWebHostEnvironment'(是否缺少 using 指令或程序集引用?)

azure - Terraform azuread 服务原则权限 权限

azure - 为什么这些 Azure 权限不起作用?

python - 如何在Python中生成JWT断言

java - Kotlin Spring security + JWT - 注册端点上的 401

node.js - JWT 撤销信息存放在哪里,mongoDB 还是 Redis?