ADFS 2016 是否支持 OIDC 的"配置文件"范围?



我正在尝试使用OIDC和授权代码流来实现一个web应用程序。我使用OIDC Core 1.0规范作为应该如何工作的参考。我正试图在Microsoft ADFS 2016服务器上实现这一点,该服务器通常声称支持OIDC。

除了一个例外,我已经设法使工作流程在大部分情况下正常工作。当我调用令牌端点以将我的授权码交换为access_tokenid_token时,我希望通过name声明获得用户的可显示名称。但我从ADFS收到的代币中没有这种说法。

当我重定向到ADFS服务器的授权端点时,我会将openid profilescope值传递给它。根据OIDC规范第5.4节,profile范围应导致请求name索赔。但我没有收到这种说法。我确实得到了一些我可以考虑使用的其他声明(即upnunique_name),但我正在尽可能地与标准保持一致。

这是否意味着ADFS 2016在这一特定领域不符合OIDC规范?还是我读错了我在这里引用的规范章节?

如第18节所述,与名称相关的标准声明通常是given_namefamily_name,我总是尝试根据这些值对应用程序进行编码,因此您的担忧是正确的。

作为消费者,您还应该能够选择这些索赔的发放地点。然而,提供者通常不完全符合标准,因此您可能需要稍微调整代码。

这是一篇关于定制ADFS索赔的MS文章,尽管它可能不会让你清楚地了解索赔应该如何工作。

更多信息

在高层,以下是OAuth系统发布声明的方式:

  • 用户进行身份验证(也可以授予同意)
  • 授权服务器在其数据库中记录此"委派",以及相关的声明和作用域
  • 应用程序可以控制声明的公开方式和位置,例如哪些令牌或端点包括它们

有关更多信息,请参阅这篇关于个人身份信息(PII)的文章,并了解索赔映射器如何在Curity系统中工作。

你的ADFS提供商可能没有给你完全的控制权,但值得注意的是设计模式,并尽可能减少代币中的用户信息。

虽然我看到的一切都指向Server 2016上的ADFS 4,支持标准OIDC范围/声明,如电子邮件和;个人资料,在实践中,我没能做到这一点。

我确实找到了解决办法:

  1. 请确保您在应用程序中使用的是令牌端点(而不是userinfo端点)。(如果要从另一个平台设置联盟,请确保未设置userinfo端点)
  2. 在ADFS中打开应用程序的Web API属性,方法是打开ADFS管理工具>选择";应用程序组";从导航窗格>双击应用程序的名称>双击关联的Web API的名称
  3. 选择";客户端权限";选项卡,然后选中";allatclaims";复选框中的";允许的范围:;部分
  4. 选择";"发布转换规则";选项卡,然后选择";添加规则"按钮(如果您有现有的规则,您可以修改或删除它们)
  5. 选择";将LDAP属性作为声明发送";从下拉列表中;下一步>quot;按钮
  6. 为规则命名
  7. 从";属性存储:"下拉列表
  8. 将您希望与索赔一起发送的属性添加到";LDAP属性到传出声明类型的映射:;部分在左侧框中输入要发送的AD属性的名称(您可以键入以快速查找),然后在右侧框中输入您希望发送的传出索赔的名称

例如:type"邮件";在左框中选择";电子邮件地址";AD属性,然后键入"AD";电子邮件";在右侧框中发送属性作为";电子邮件";。

  1. 添加完要添加的任何属性后,单击;完成";按钮
  2. 接下来单击";OK";"Web API属性"窗口上的按钮保存更改
  3. 最后,单击";OK";按钮

我仍然不确定为什么这不符合我的预期,我的所有设置似乎都是正确的。不过,我看到很多人问这个问题,所以我希望这能帮助其他人。

如果有人知道为什么2016服务器上的ADFS 4.0没有按预期工作,请在评论中告诉我!

最新更新