有人可以解释 OIDC 中的 ACR 返回值吗?

Posted

技术标签:

【中文标题】有人可以解释 OIDC 中的 ACR 返回值吗?【英文标题】:Can someone explain ACR return values in OIDC? 【发布时间】:2019-03-09 00:25:27 【问题描述】:

最后的问题见底部

所以我了解了 acr 值的基本概念。我知道它“指定了一组要求身份验证满足的业务规则。这些规则通常可以通过使用多种不同的特定身份验证方法来满足,无论是单独使用还是组合使用。”

但是我对返回值感到困惑。我知道,如果我在响应范围内请求 acr 声明(作为基本声明),我必须为特定的身份验证上下文类引用指定 values 参数。

这就是我感到困惑的地方。当我查找 a​​cr 返回值(身份验证上下文类参考)时,我发现了许多可以参考的不同 LOA 配置文件(https://www.iana.org/assignments/loa-profiles/loa-profiles.xhtml)。然而,OIDC 文档中似乎只引用了一个配置文件(并且与美国有关)——InCommon。

当我搜索 InCommon 的网站时,我不清楚 IdP 是否需要通过 InCommon 认证才能返回 ACR 值。

以下摘自 InCommon 的网站:

“它是如何工作的? InCommon 社区已经开发并发布了青铜和白银配置文件,这些配置文件定义了身份提供者必​​须满足的特定标准才能获得认证。身份提供者将这些标准合并到其身份和访问管理系统中。 在铜牌的情况下,身份提供者可以进行审计以证明符合配置文件,也可以简单地签署一份声明(自我断言),证明它符合标准。 Silver 需要进行审计,这通常可以由与 IT 运营没有直接关联的内部审计师来完成。”


我也对返回值的工作方式感到困惑,因为 OIDC 文档为 acr 提供了一个示例“返回”值:

"acr": "values": ["urn:mace:incommon:iap:silver"]

然而,当我查看 Microsoft 网站上的 acr 返回值示例时,它给出的 acr 返回值为 0。

“acr”:“0”


所以我最后的问题是: 1. 有人可以解释一下是否需要认证 IdP(提供令牌)才能提供 acr 返回值。 2.返回值是“incommon:iap:silver”还是“0”?

【问题讨论】:

【参考方案1】:

您可以将 ACR 值视为客户端和 idp 商定的一组任意值,以传达发生的身份验证级别。这是为了让客户对所发生的身份验证的资格有一定的信心。

它们没有“官方”值。它们应该通过 OIDC 发现响应的acr_values_supported 参数进行通信。请参阅https://openid.net/specs/openid-connect-discovery-1_0.html (OpenID Connect Discovery 1.0) 了解更多信息。

由于它们不是必需的参数,因此它们的实现和解释方式具有相当大的灵活性。据我了解,IDP 将根据请求中提供的acr_values 执行身份验证过程,因为它认为合适。通常,这意味着如果客户提供 IDP 理解的价值,它将受到尊重。但是,如果提供了不受支持的值,则不能保证它会被解释(也不应该导致错误),IDP 可能只是诉诸默认身份验证过程并将相应的 ACR 值返回给客户端。

另一方面,客户端可以选择检查 ID 令牌中的 acr_values 字段,并确定发生的身份验证级别是否真正满足客户端需要执行的操作。如果是,则继续使用身份;如果不是,则拒绝身份断言。

希望它能解决您的问题。

【讨论】:

我喜欢这个答案,符合我对acr_values的理解。是否有关于“如何实施和解释它们有相当大的灵活性”的定制实践的文献?热衷于了解人们在现实生活中使用 acr_values 的目的。【参考方案2】:

我找到的值在那里 https://openid.net/specs/openid-connect-modrna-authentication-1_0.html#acr_values

否则我们可以依赖这些通用的: https://spaces.at.internet2.edu/display/macedir/Identity+Assurance+Qualifiers+%28was+LOA%29--A+Recommended+URI+Profile+for+InCommon

【讨论】:

以上是关于有人可以解释 OIDC 中的 ACR 返回值吗?的主要内容,如果未能解决你的问题,请参考以下文章

有人可以向我解释一下这个 Chunk Size 值吗

有人可以解释我如何设置我想在文本框/组合框/日期时间选择器中写入的值吗? [关闭]

我可以保存文本框的值吗? [复制]

有人使用 ACR1222L android 库吗?

如何将多个 acr_values 传递给 IdentityServer?

ThinkPHP中查询数据库where()中的条件必须包含主键值吗