spring - Spring Security - Oauth 实现
问题描述
我正在尝试实现与 oauth2 类似的授权服务,只是它不需要用户名和密码来生成密钥和刷新令牌。但从我发现的情况来看,你必须给它一个用户和一个密码。有什么解决方法吗?
我的代码是:
@Configuration
public class AuthorizationServerConfiguration implements AuthorizationServerConfigurer {
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private DataSource dataSource;
@Autowired
private AuthenticationManager authenticationManager;
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.checkTokenAccess("isAuthenticated()").tokenKeyAccess("permitAll()");
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.jdbc(dataSource).passwordEncoder(passwordEncoder);
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.authenticationManager(authenticationManager);
}
}
@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Bean
public AuthenticationManager getAuthenticationManager() throws Exception {
return super.authenticationManagerBean();
}
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
}
解决方案
根据您的要求,您可以使用 JWT 令牌。它支持各种算法,如RS256
,HS256
我会HS256
作为参考。
在您的授权服务器中,您需要根据一些 Secret 密钥生成 Token。在客户端。您需要使用相同的密钥验证令牌。
如果您不想在授权服务器和客户端服务器之间共享密钥
您可以使用RS256
具有公钥和私钥概念的哪个。
为了实现,您需要Filter
为每个调用添加一个检查 Header 中的 Token 。
有关实现的更多详细信息,请参阅这篇文章。
推荐阅读
- sql - 如何标记过去多次重复的 id
- javascript - 如何使用函数减少值
- tomcat - catalina.logs 中的错误“刷新流 UDP:localhost:514 时出错”
- azure - Windows 虚拟桌面 - 资源不可见
- android-studio - 复制旧项目时,如何让 Android Studio “忘记”旧文件路径?
- c# - 将对象保存为 .msg 文件时缺少 Microsoft.Graph.Message 到 MsgKit.Email 图像
- python - 计算包含熊猫中特定数据组合的唯一项目
- sql - 如何在插入语句中连接另一个表中的两列值?
- c - 如何确定文件是否包含类似 UTF-8 的字符
- smarty3 - 如何在没有错误的情况下将对象添加到 smarty:未定义的扩展类“Smarty_Internal_Method_Register_Object”