id_token 使用 AD FS 2016 使用 OpenID Connect 缺少自定义声明

id_token missing custom claims using AD FS 2016 using OpenID Connect

我正在尝试将 ADFS 2016 与本机 Android 应用程序的 OpenID Connect 身份验证结合使用,以获取 ID 令牌。然后,ID 令牌将作为用户身份的证明提供给我的服务器,并作为声明提供一些其他属性(例如电子邮件、first/last 名称)。

ID Token 必须包含自定义声明 - 这是我的症结所在。

我在 ADFS 中配置了一个应用程序组并添加了一个本机应用程序和一个 Web API。

我在 ADFS 中将我的服务器表示为 Web API,因为它允许我指定自定义声明规则。除了自定义声明规则之外,我还将我的本机应用程序的允许范围设置为 'openid profile email allatclaims'

我一直在使用的 Android 库是 OpenID AppAuth 库 - 除了 ID 令牌内部没有额外的声明外,它都非常出色。

Android 应用正在使用授权类型的代码,使用来自 ADFS 中本机应用的客户端 ID。我已将 'aud' 参数设置为 Web API.

的标识符

我只是看不出我遗漏了什么,这将导致客户收到带有这些自定义声明的 ID 令牌。

作为附加测试,我使用 MS ADAL 创建了一个 macOS 应用程序并成功提供了自定义声明,但它们在 access_token 中并且它使用了 SAML。

你看过这个sample吗?

必须有:

  • response_mode 设置为 form_post
  • 只有 public 个客户可以在 ID 令牌中获得自定义声明
  • 依赖方标识符(Web API 标识符)应该与客户端标识符相同

在您的 AD FS 服务器上安装了 KB4019472:

  • response_mode 设置为 form_post
  • public 和机密客户都可以在 ID 令牌中获得自定义声明
  • 将范围allatclaims 分配给客户端-RP 对。