【问题标题】:Hashed client secrets for the client credentials OAuth 2 flow in Apache CXFApache CXF 中客户端凭据 OAuth 2 流的散列客户端机密
【发布时间】:2014-12-27 22:54:57
【问题描述】:

我正在尝试使用 Apache CXF(版本 2.7.12)实施 OAuth 2.0 的客户端凭据流以保护 RESTful 服务。

我唯一的客户(目前)将被信任对密钥和秘密保密 - 我知道这方面的注意事项。

我的问题是我应该如何将客户端密码存储在授权服务器上。在我看来,“客户端密码”实际上是一个密码,因此应该加盐和散列。但是,CXF 的 AccessTokenService 会比较存储的秘密和请求中传入的值,它只进行 String.equals() 比较,并且似乎没有给我任何可以提供不同机制的钩子。

这意味着我需要以纯文本形式存储客户端密码,以便将其与请求中的纯文本值进行比较,而无需稍加修改。

我是否遗漏了一些明显的功能,可以让我在比较之前对传入的值进行散列,还是我对客户端机密过于谨慎?也许我把它当作密码是错误的?

【问题讨论】:

    标签: oauth-2.0 cxf


    【解决方案1】:

    一种答案,供将来遇到此问题的人使用。

    我的方法是创建一个非常简单的过滤器(如下所述:http://cxf.apache.org/docs/jax-rs-filters.html),它手动创建一个 SecurityContext (https://cxf.apache.org/javadoc/latest/org/apache/cxf/security/SecurityContext.html),并在消息通过过滤器时将其添加到消息中。

    这意味着,随着流程继续流向 CXF 的 AccessTokenService,它被识别为已通过身份验证。

    我还在 CXF 邮件列表上提出了一个问题,并得到了一位开发人员非常迅速的答复,他同意他最近注意到这是一个潜在问题,并且正在研究它。在几个小时内,他提交了一项解决该问题的更改,并且看起来这将是一个理想的解决方案。不幸的是,我仍然没有时间对其进行测试,因为我的解决方案有效,并为我提供了一些额外的灵活性,这对我项目的其他要求很有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2019-12-04
      • 2021-12-09
      • 1970-01-01
      • 2019-12-03
      • 2017-09-06
      相关资源
      最近更新 更多