【问题标题】:Public keys in OpenID ConnectOpenID Connect 中的公钥
【发布时间】:2018-07-13 00:33:42
【问题描述】:

我目前正在尝试使用 IdentityServer4 为我拥有的不同应用程序的用户构建单点登录体验。它们都托管在同一个本地网络中,并且没有第三方应用程序对其进行身份验证。客户端应用仍然基于 Katana/Owin。

我正在使用隐式工作流。

目前我仍然使用运行时随机生成的证书来签署令牌。

不知道

  • 我是否真的需要更多,保持原样有什么影响,以及
  • 客户端如何实际验证签名。

关于第二个问题,我在 openidconnect 规范中找到了这篇文章:

OP 通过其发现文档公布其公钥,或者可以 通过其他方式提供此信息。 RP宣布其公开 密钥通过其动态注册请求,或者可以传达这个 通过其他方式获取信息。

这是否意味着 Katana 实际上是从 IdentityServer4 获取公钥并进行相应的验证?如果是这样,证书是否更改是否重要?发行和验证令牌之间的时间总是很短,对吗?那么为什么我需要一个适当的、很少更改的证书呢?

【问题讨论】:

    标签: owin identityserver4 openid-connect pki katana


    【解决方案1】:

    在应用启动时生成新证书有一些缺点:

    • 如果您重新启动 IDS4 流程,您实际上会使任何其他有效令牌无效,因为签名将不再有效
    • 无法横向扩展 - 所有服务器都需要具有相同的签名和验证密钥
    • 客户端可能只会定期更新他们的发现信息,因此您需要允许一个翻转期,这是 IDS4 支持的,因为您可以拥有多个验证密钥。

    在此处查看指南:http://docs.identityserver.io/en/release/topics/crypto.html

    下一个最简单的选择是使用安装在主机证书存储中的自行颁发的证书。

    【讨论】:

      【解决方案2】:

      首先,OpenID Connect 发现是一个与依赖方通信以动态检索提供者信息的过程。对此有专门的规范,OpenID Connect Discovery 1.0

      根据metadata section,jwks_uri 解释了令牌签名密钥发布。

      1. 那么这是否意味着 Katana 实际上是从 IdentityServer4 获取公钥并进行相应的验证?

      是的,应该。如果您的应用程序(依赖方)需要动态信息,您应该继续使用发现文档来检索令牌签名密钥信息。

      2 如果是这样,证书更改是否重要?颁发和验证令牌之间的时间总是很短,对吗?

      发现文档是 OpenID Connect 动态的一部分(参考 - http://openid.net/connect/)。所以是的,它可用于将证书更改传达给依赖方(令牌消费者)

      3. 那么为什么我需要一个合适的、很少更改的证书呢?

      必须有证书才能验证身份提供者颁发的 id 令牌。所以至少,证书必须存活到最后一个令牌过期。除此之外,您可能正在使用由 CA 颁发的适当证书,这需要付出一定的代价。因此,某些实现可能很少更改证书。

      奖励:客户如何实际验证签名。

      您对收到的消息进行哈希处理,将其与使用证书公钥的解密签名进行比较。另外,如果您想知道关键信息的格式,它是由RFC7517 定义的JWK。

      P.S - ID 令牌验证与 JWT 规范解释的 validating a JWT 相同。

      注意 - 我不是 PKI 领域的专家。一些专家可能会针对独立于 OpenID Connect 协议的短期证书指出其他内容。

      【讨论】:

        猜你喜欢
        • 2015-09-26
        • 2018-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-09
        • 2018-02-08
        • 2021-11-15
        相关资源
        最近更新 更多