java - 如何在 spring-boot 中生成 client-id 和 client-secret 并存储在数据库中?
问题描述
我知道 stackoverflow 上已经存在类似的问题。当我浏览它们时,它并没有解决我正在寻找的问题。
我有一个spring-boot Web 服务,Oaut2ClientManagement
我在其中创建了一个 API,它基本上将注册一个新客户端。当新公司注册时,companyId
(它是在某个company_details
表中预定义的,是的,该公司已添加到列表中但未注册以访问 API)被发送,因此基于我必须生成client-id
&client-secret
我将存储在CLIENT_KEY_MANAGEMENT
表中。基于此,我编写了一个 java 代码来生成accessToken
.
所以我的问题是如何根据收到的请求生成客户端 ID和客户端密钥?companyId
我已经完成了这个答案。但是有没有任何预定义的方式spring-boot oauth
可以完成这项工作?下一步是基于它生成访问令牌。
我还浏览了 oAuth教程。但是,在此client-id
&client-secret
存储在属性文件中,而不是在数据库/其他源中。也好像是单对。
如果有人可以指导我使用spring-boot
.
解决方案
有一个JdbcClientDetailsService
为此特定目的。
您需要在数据库中定义下表
create table oauth_client_details (
client_id VARCHAR(256) PRIMARY KEY,
resource_ids VARCHAR(256),
client_secret VARCHAR(256),
scope VARCHAR(256),
authorized_grant_types VARCHAR(256),
web_server_redirect_uri VARCHAR(256),
authorities VARCHAR(256),
access_token_validity INTEGER,
refresh_token_validity INTEGER,
additional_information VARCHAR(4096),
autoapprove VARCHAR(256)
);
并配置您的 Oauth2 授权服务器,如下所示
@Configuration
@EnableAuthorizationServer
public class OAuth2AuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.jdbc(dataSource);
}
}
最后你可以JdbcClientDetailsService
在你注册的位置注入 bean companyId
。
@Autowired
JdbcClientDetailsService jdbcClientDetailsService;
...
BaseClientDetails clientDetails = new BaseClientDetails(companyId, resourceIds, scopes, grantTypes, authorities);
clientDetails.setClientSecret("generatedpassword");
jdbcClientDetailsService.addClientDetails(clientDetails);
最后,您可以使用这些客户端凭据登录。
更新
如果您希望您的密码被散列,您可以如下设置 PasswordEncoder。
clients.jdbc(dataSource)
.passwordEncoder(new BCryptPasswordEncoder())
BaseClientDetails
可在包装中使用org.springframework.security.oauth2.provider.client
。
服务不会生成客户端密码。您需要生成它并将其设置为BaseClientDetails
.
推荐阅读
- php - base_url 包括两次基地址。不加载引导 css 文件
- php - 为 Nextcloud 创建新的外部存储
- android - 如何使用转换为 LiveData 对象设置多个属性?
- python - Python 切换器无法访问
- php - 在 PHP 中上传多个文件失败
- mysql - mysql中的Sample-Gene-Expression数据存储问题
- oauth-2.0 - OAuthTAI 身份验证失败,状态 = 401,WWW-Authenticate: Bearer realm="imfAuthentication", scope="UserAuthRealm" in MFP 版本 7.1
- ibm-mobilefirst - MFP8 - 从数据库中删除已部署的适配器
- php - 如何在phpword中设置页面内容对齐或页面大小?
- sql - 将 60 列表从一个存储过程返回到另一个