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

Edw*_*ard 2 android adfs openid-connect

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

\n\n

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

\n\n

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

\n\n

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

\n\n

我一直在使用的 Android 库是 OpenID AppAuth 库 - 除了 ID 令牌内部没有额外的声明之外,它都运行良好。

\n\n

Android 应用程序使用授权类型的代码,使用 ADFS 中本机应用程序的客户端 ID。我已将“aud”参数设置为 Web API 的标识符。

\n\n

我只能\xe2\x80\x99t 看到我\xe2\x80\x99m 缺少的内容,这将导致客户端收到带有这些自定义声明的ID 令牌。

\n\n

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

\n

nzp*_*mad 5

您看过这个样本吗?

\n\n

一定有:

\n\n
    \n
  • response_mode 设置为 form_post
  • \n
  • 只有公共客户端才能在 ID 令牌中获取自定义声明
  • \n
  • 依赖方标识符(Web API 标识符)与客户端标识符相同
  • \n
\n\n

在 AD FS 服务器上安装 KB4019472 后:

\n\n
    \n
  • response_mode 设置为 form_post
  • \n
  • 公共和机密客户都可以在 ID 令牌中获取自定义声明
  • \n
  • 将范围 allatclaims 分配给客户端 \xe2\x80\x93 RP 对。
  • \n
\n

  • 粗体部分确实是关键。 (2认同)
  • 我几天来一直在寻找为什么 access_token 不包含任何自定义声明。我从未见过任何说客户端 ID 和依赖方标识符需要相同的内容,但确实使这些匹配修复了 ADFS 4.0 的所有问题。 (2认同)