【问题标题】:why we are storing the client secret as plain text in database in spring OAuth 2.0?为什么我们在 Spring OAuth 2.0 中将客户端密码作为纯文本存储在数据库中?
【发布时间】:2016-06-12 01:15:48
【问题描述】:

我是 Spring OAuth 2.0 的新手。我们想为我们的资源服务器使用“客户端凭据”授权类型。在实现此类型时,我们不确定是否将“客户端 ID”和“客户端密钥”作为纯文本在数据库中维护。有人会破解这些客户端 ID 和客户端密码,如果我们将客户端密码存储为纯文本,可能会错过使用它们。

谁能告诉我们是否有办法以加密格式保留这些值“客户端 ID”和“客户端秘密”?

Spring OAuth 2.0 中是否有任何默认选项可以对其进行编码和解码?

请告知我们是否有任何特定原因将客户端密码存储为纯文本?

谢谢,

【问题讨论】:

  • 您保存的数据用于对客户端进行身份验证,因此您需要能够在服务器上读取它,这样每个入侵您的服务器的人都可以。 OAuth 的设计方式是,存储的信息(authtoken)只能用于为其颁发它的服务。如果有人入侵了您的服务器,您需要在从该攻击中恢复后重置此令牌。
  • 只需添加一个PasswordEncoder,就像您通常对用户/密码所做的那样。
  • 嗨,我们被卡住的是,如果我们可以在创建时使用“PasswordEncoder”对客户端密码进行编码,Spring OAuth 2 库将通过获取编码的客户端密码来创建访问令牌。意思是我们无法发现 Spring OAuth 2.0 库从数据库中获取编码的客户端密码并对其进行解码,然后它们会生成访问令牌。我们在资源服务器中也需要这个东西。请让我知道在春季 OAuth 2.0 中有什么方法可以做到这一点,以便我们可以保护客户端的安全吗?谢谢,

标签: java spring spring-mvc spring-security oauth-2.0


【解决方案1】:

您不得将客户端密码保存为纯文本。 客户端机密不得解密。 只需使用 org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder ,它将使用BCrypt 算法加密客户端密码。

【讨论】:

    猜你喜欢
    • 2019-05-17
    • 2011-04-13
    • 2015-06-21
    • 2013-11-06
    • 2013-10-30
    • 2019-04-29
    • 2013-02-13
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多