【问题标题】:Secure API with OpenID Connect - RP trust of OP使用 OpenID Connect 保护 API - OP 的 RP 信任
【发布时间】:2017-09-20 00:45:22
【问题描述】:

掌握 OpenID Connect 与第三方 IdP (OP) 并保护 API。我对客户端和用户代理组件以及 OAuth2.0 流程和范围感到满意,以获取从 IdP 发给我的客户端的访问令牌和 id 令牌

我正在努力解决的是资源提供者端以及安全 API 如何信任客户端传递的访问令牌。我一直将信任元素等同于 SAML 以及 IdP 和 SP 之间静态配置数据的初始交换。这似乎在 OpenID Connect 中丢失了,所以我错过了 trust 元素。我正在阅读有关动态发现的信息,但我再次错过了关于 RP 和 IdP 之间信任的技巧。是什么阻止我设置流氓 IdP?为什么 API 提供者应该信任来自我的 IdP 的令牌?

最后一个问题是关于 RP 中唯一标识符的本地表示。帐户 ID 是否需要在访问令牌出现之前存在?我希望它确实如此(再次使用 SAML 类比,它需要在身份验证成功之前进行本地帐户表示)因此依赖方的帐户管理也是端到端身份验证成功的要求。

归结为两个问题。 API 如何信任提供的访问令牌? API 提供者是否需要在成功验证这些资源请求之前配置帐户?

提前致谢。

【问题讨论】:

    标签: security authentication oauth-2.0 openid-connect


    【解决方案1】:

    动态客户端注册仅用于各方之间没有预先建立的信任并且希望允许任何具有有效证书的 OP 运行的情况。

    当您想限制 OP 集时,您需要提前静态注册这些 OP,从而执行与 SAML 中相同类型的引导来创建预先建立的信任。

    可以通过 RP 接收的 id_token 中的 (<sub>,<iss>) 元组创建唯一标识符。

    【讨论】:

    • 谢谢@Hans。你会不会提前参考静态注册的过程?这在这个用例中最有意义。使用 IDaaS ( Okta ) 进行身份验证并利用多个资源提供者公开其 API 并支持 OpenID Connect 的本机应用程序或单页应用程序。
    • 就像在 SAML 中一样,没有定义提前注册的方法:本质上它涉及使用一些带外通道将 client_id/client_secret 和 redirect_uri 从 RP 传递到 OP
    • 感谢@hans 填补了空白。非常感谢。
    • 如果你能接受答案就好了
    【解决方案2】:

    对于 RP 与 OP 的动态注册,没有描述信任度量。可以强制执行两种 HTTP 信任级别。

    1. HTTPS 需要与链接到信任证书根的证书一起使用。
    2. HTTPS 具有 EV 证书。这需要 CAB 定义的内部打样。

    我已提议在 IDESG 中使用信任生态系统,但这还有一段距离。 看看 Kantara 是否有任何解决方案会很有趣。

    【讨论】:

    • 谢谢@Tom。因此,只要支持协议,动态发现中的资源提供者实际上就是“与任何人进行身份验证”模型?
    【解决方案3】:

    从 OpenID Connect 的角度来看,您是正确的。这并不意味着您构建的任何依赖方代码都需要不安全。我提到了两种验证 OP 的方法。

    OP 可以强制执行一组类似的安全规则,但正如其他人所说,大多数 OP 出于这个原因不启用动态注册。

    【讨论】:

      【解决方案4】:

      id_token 是 JWS 签名的 JWT。它由 OpenID Connect OP (IdP) 签名,通常使用其私钥。您必须验证签名,以确保您知道 JWT/id_token 发射器。之后,由您决定您是否可以信任此发射器来执行客户愿意实现的操作。

      id_token 包含一个声明 (at_hash),它是对 access_token 的引用,因此您可以确定访问令牌是由同一个 OP 生成的。

      【讨论】:

        猜你喜欢
        • 2020-09-13
        • 1970-01-01
        • 2018-09-28
        • 2021-07-04
        • 1970-01-01
        • 2019-06-22
        • 2023-03-26
        • 2017-06-11
        • 1970-01-01
        相关资源
        最近更新 更多