我正在尝试为我的SPA应用程序实施OAuth2身份验证。我面临一个问题,例如有两个用户,user1和user2都登录。当user1尝试使用user2 访问令牌 时,user1可以访问。我不知道如何保护访问令牌。
答案 0 :(得分:0)
每次用户使用oauth2身份验证登录时,它会将新登录用户的用户ID与唯一的access_token相关联,您可以获取该user_id,然后将其映射为当前登录用户的user_id找出用户是否正在使用自己的access_token。
答案 1 :(得分:0)
我找到了解决方案。 要自定义访问令牌,我们可以保护用户访问令牌。 我已使用令牌增强器自定义访问令牌。 代码如下所示
@Primary
@Bean
public DefaultTokenServices defaultTokenServices() {
DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
defaultTokenServices.setTokenStore(tokenStore());
defaultTokenServices.setTokenEnhancer(tokenEnhancer());
defaultTokenServices.setSupportRefreshToken(true);
return defaultTokenServices;
}
和自定义增强器就像
public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
AppUserDetails appUserDetails = (AppUserDetails) authentication.getPrincipal();
final Map<String, Object> additionalInfo = new HashMap<>();
String encodedBytes = Base64.getEncoder().encodeToString(appUserDetails.getIdUser().toString().getBytes());
additionalInfo.put("authorities", appUserDetails.getAuthorities());
additionalInfo.put("username", appUserDetails.getUsername());
additionalInfo.put("idUser", encodedBytes);
((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
return accessToken;
}
在其他方法中,我已经解码了自定义访问令牌。 我也使用了AuthorizationServerEndpointsConfigurer
@Override
//Configure the properties and enhanced functionality of the Authorization Server endpoints.
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenStore(tokenStore()).tokenEnhancer(tokenEnhancer()).authenticationManager(authenticationManager);
}