ADFS 2016 支持 OIDC 的“配置文件”范围吗?

ADFS 2016 support for OIDC's `profile` scope?

我正在尝试使用 OIDC 和授权代码流程来实现 Web 应用程序。我使用 OIDC Core 1.0 specification 作为 应该 工作方式的参考。我正在尝试使它在 Microsoft ADFS 2016 服务器上运行,该服务器通常声称支持 OIDC。

除了一个例外,我已经设法使工作流程的大部分工作正常进行。当我调用 token endpoint 将我的授权代码交换为 access_tokenid_token 时,我希望通过 name 声明获得用户的可显示名称。但是我从 ADFS 收到的令牌中不存在该声明。

当我重定向到 OIDC 规范的 ADFS 服务器的 authorization endpoint, I pass it scope values of openid profile. According to section 5.4 时,profile 范围应该导致请求 name 声明。但我没有收到这种说法。我确实得到了一些我可以考虑使用的其他声明(即 upnunique_name),但我正在努力尽可能地与标准保持一致。

这是否意味着 ADFS 2016 不符合该特定领域的 OIDC 规范?还是我误读了此处引用的规范部分?

与名称相关的标准声明通常是 given_namefamily_name,如 Section 18 中所述,我总是尝试根据这些值编写应用程序代码,因此您的担忧是正确的.

作为消费者,您还应该能够选择在何处发出这些索赔。供应商不完全符合标准是很常见的,因此您可能需要稍微调整您的代码。

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

更多信息

概括地说,OAuth 系统是如何发出声明的:

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

有关更多信息,请参阅 Personally Identifiable Information (PII) 上的这篇文章 - 并了解 Claims Mappers 如何在 Curity 系统中工作。

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