在Spring授权服务器中创建OAuth2客户端时,我需要在秘密中指定{noop}吗?

问题描述 投票:0回答:1

我有 2 个关于 Spring 授权服务器 OAuth2 客户端创建的问题,这可能听起来很愚蠢。

问题1:

在Spring授权服务器的例子中我看到了“{noop}secret”。下面的代码中的“{noop”} 应该做什么?

RegisteredClient.withId(UUID.randomUUID().toString())
                    .clientId(clientId)
                    .clientSecret("{noop}"+secret). //<-- this
                    .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
                    .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
                    .scope(OidcScopes.OPENID)
                    .scope(OidcScopes.PROFILE)

我没有创建任何 BCryptPasswordEncoder 等 bean,所以听起来我需要声明该类型的 bean。在保存 OAuth2 客户端时,我是否需要以编程方式对秘密进行编码,如下所示:

 .clientSecret(bcryptPassword.encode(secret)).  // like that?

问题2: 几个月前我创建了一个 OAuth2 客户端,现在我不再记得这个秘密了。当我查看数据库时,它采用 bcrypt 形式“{bcrypt}$2a$...”,我不知道它是如何变成这个值的。我相信它在“{noop}mysecretvalue”中。

谢谢你

spring-authorization-server
1个回答
0
投票

问题1:
如果您不想在将密码保存到存储库时对其进行编码,可以通过在您的密码中添加前缀

{noop}
来实现。当您执行此操作时,Spring 在将用户提供的密码与您配置的密码进行比较时,将在后台使用
NoOpPasswordEncoder

如果您使用

BCryptPasswordEncoder
,则必须按照您已经提到的方式对密码进行编码。

例如:

clientSecret(bcryptPasswordEncoder.encode(secret))

但是,

NoOpPasswordEncoder
已被弃用,Spring 建议使用自适应单向编码函数,如
Bcrypt

问题2:
这是由于 Spring 授权服务器中的

UpgradeEncoding
功能而发生的。当您稍后声明
BCryptPasswordEncoder
bean 时,如果您之前在存储库中保存了
{noop}secret
,则此功能会将其解释为您已升级密码编码器,现在您想要升级密钥。所以它会相应地升级你的秘密。如果您仍然想在不编码的情况下使用机密,则应该专门声明一个
NoOpPasswordEncoder
bean。您可以在此处阅读更多相关信息。

© www.soinside.com 2019 - 2024. All rights reserved.