ADFS 2016支持OIDC的`profile`作用域?

piah890a  于 2022-10-08  发布在  其他
关注(0)|答案(2)|浏览(127)

我正在尝试实现一个使用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规范?或者我误读了我在这里引用的规范的各个部分?

2fjabf4q

2fjabf4q1#

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

作为消费者,您还应该能够选择在哪里发布这些索赔。然而,提供程序不完全符合标准是很常见的,因此您可能必须稍微修改代码。

以下是关于自定义ADFS声明的MS Article,尽管它可能不会让您清楚地了解声明应该如何工作。

更多信息

从更高的层面来看,以下是OAuth系统发布声明的方式:

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

有关更多信息,请参阅Personally Identifiable Information (PII)上的这篇文章-并查看索赔Map器如何在安全系统中工作。

也许您的ADFS提供程序并没有给您完全的控制权,但是有必要了解设计模式,并尽可能减少令牌中的用户信息。

c9x0cxw0

c9x0cxw02#

虽然我看到的一切都指向服务器2016上的ADFS 4支持标准的OIDC作用域/声明,如电子邮件和配置文件,但在实践中我无法使其正常工作。

我确实找到了解决办法:

1.确保您在应用程序中使用令牌终结点(而不是UserInfo终结点)。(如果您要从其他平台设置联盟,请确保未设置UserInfo端点)
1.在ADFS中打开您的应用程序的Web API属性,方法是打开ADFS管理工具>从导航窗格中选择“应用程序组”>双击您的应用程序的名称>双击关联的Web API的名称。
1.选择“客户端权限”选项卡,然后选中“允许的作用域:”部分中的“所有声明”复选框。
1.选择“发行转换规则”标签,然后选择“添加规则...”按钮(如果您有现有的规则,您可以修改或删除它们)。
1.在下拉列表中选择[Send ldap Attributes as Claims],然后点击[Next>]按钮。
1.为规则指定任意名称。
1.从“属性存储:”下拉列表中选择您的活动目录。
1.在“将LDAP属性Map到传出声明类型:”一节中,添加您希望与声明一起发送的属性...在左侧框中输入您要发送的AD属性的名称(您可以键入快速查找),然后在右侧框中输入您希望发送的外发申请的名称。
例如:在左侧框中键入“mail”以选择“Email Address”AD属性,然后在右侧框中键入“Email”以将该属性作为“Email”发送出去。

1.添加完要添加的任何属性后,请单击“Finish”按钮。
1.下一步,在您的应用程序的Web API属性窗口中单击“确定”按钮以保存更改。
1.最后,在应用程序组属性上单击“确定”按钮。

我仍然不确定为什么这不像我想要的那样工作,我的所有设置似乎都是正确的。我已经看到很多人问这个问题,所以我希望这能帮助其他人。

如果有人知道为什么服务器2016上的ADFS 4.0不能正常工作,请在评论中告诉我!

相关问题