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

cyb*_*ior 5 authentication access-token jwt openid-connect

最后的问题见底部

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

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

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

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

以下摘录自 InCommon 的网站:

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


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

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

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

"acr": "0"


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

小智 7

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

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

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

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

希望它能解决您的问题。