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

标签 authentication jwt access-token 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 社区已经开发并发布了铜牌和银牌配置文件,它们定义了身份提供者必​​须满足的特定标准才能获得认证。身份提供者将这些标准纳入其身份和访问管理系统。
对于 Bronze,身份提供者可以进行审计以证明符合配置文件,或者可以简单地签署一份声明(自我断言)以证明其符合标准。
Silver 需要进行审计,这通常可以由与 IT 运营没有直接关联的内部审计师完成。”

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

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

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

"acr": "0"

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

最佳答案

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

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

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

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

希望它能解决您的问题。

关于authentication - 有人可以解释 OIDC 中的 ACR 返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52632690/

相关文章:

android - 在 Android 中使用 Volley for GIthub 进行基本身份验证。获取错误代码 422

ios - 唯一标识一个 iOS 用户

authentication - Sonar 3.4 LDAP 身份验证与 Active Directory - NullPointer 异常

javascript - firebase 如何发送有效载荷包含下划线字符的 JWT token ?

node.js - jwt 访问 token 和刷新 token 流

iOS Swift WKWebView 使用 Session 登录

php - Laravel `jwt.refresh` token ?

Azure MSI 强制 token 刷新

python - JWT 授权和 token 泄漏

javascript - npm 更新 Firebase 后无法登录