Android id_令牌缺少使用AD FS 2016的自定义声明使用OpenID Connect

Android id_令牌缺少使用AD FS 2016的自定义声明使用OpenID Connect,android,openid-connect,adfs,Android,Openid Connect,Adfs,我正在尝试从本地Android应用程序使用带有OpenID Connect身份验证的ADFS 2016来获取ID令牌。然后将ID令牌提供给我的服务器,作为用户身份的证明,并提供一些其他属性(如电子邮件、名字/姓氏)作为声明 ID令牌必须包含自定义声明-这是我的症结所在 我在ADFS中配置了一个应用程序组,并添加了一个本机应用程序和一个Web API 我在ADFS中将我的服务器表示为Web API,因为它允许我指定自定义声明规则。除了自定义声明规则外,我还将本机应用程序的允许范围设置为“openi

我正在尝试从本地Android应用程序使用带有OpenID Connect身份验证的ADFS 2016来获取ID令牌。然后将ID令牌提供给我的服务器,作为用户身份的证明,并提供一些其他属性(如电子邮件、名字/姓氏)作为声明

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

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

我在ADFS中将我的服务器表示为Web API,因为它允许我指定自定义声明规则。除了自定义声明规则外,我还将本机应用程序的允许范围设置为“openid配置文件电子邮件”

我一直在使用的Android库是OpenID AppAuth库——除了ID令牌没有附加声明之外,它都工作得非常出色

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

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


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

您看到了吗

必须具备:

  • 响应模式设置为表单发布
  • 只有公共客户端才能在ID令牌中获取自定义声明
  • 依赖方标识符(Web API标识符)应与客户端标识符相同
在AD FS服务器上安装KB4019472后:

  • 响应模式设置为表单发布
  • 公共和机密客户都可以在ID令牌中获得自定义声明
  • 将范围分配给客户–RP对
加粗部分确实是关键。我已经研究了好几天了,为什么access\u令牌没有包含任何自定义声明。我从来没有看到任何东西说客户端ID和依赖方标识符需要相同,但可以肯定的是,这些匹配修复了ADFS 4.0的所有问题。