SPA 응용 프로그램에 대해 OAuth2 인증을 구현하려고합니다. 한 가지 문제에 직면하고 있습니다. 예를 들어 user1과 user2 두 명이 로그인했습니다. user1이 user2를 사용하려고 시도 할 때 액세스 토큰, user1이 액세스 할 수 있습니다. 나는 어떻게 액세스 토큰을 보안 해야할지 모르겠다.Oauth2에서 사용자 이름이있는 액세스 토큰의 유효성을 검사하십시오.
0
A
답변
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);
}
0
사용자가 oauth2 인증을 사용하여 로그인 할 때마다 새로 로그인 한 사용자의 사용자 ID를 고유 한 access_token과 연결하고 해당 user_id를 가져 와서 현재 로그인 한 user_id로 매핑 할 수 있습니다 사용자가 자신의 access_token을 사용하고 있는지 확인하십시오.