JWToauth2 새로 고침 토큰 취소
바닐라 스프링 구현으로 Oauth2 JWT Refresh Token을 취소하고 JwtToken Store를 취소할 방법을 찾고 있습니다.
먼저, 새로 고침 토큰을 취소할 수 있는 /oauth/token과 유사한 API가 없다는 것을 확인해 줄 수 있습니까?
리프레시 토큰을 다음 행에 따라 삭제하는 사용자 지정 API를 추가하고자 했습니다.
OAuth2RefreshToken oauth2RefreshToken=tokenStore.readRefreshToken(refreshToken);
tokenStore.removeRefreshToken(oauth2RefreshToken);
지금 JwtToken Store를 보니 Approval Store를 사용하고 있습니다.그래서 저는 JwtToken Store에 InMemory Approval Store를 제공했습니다.나의 JwtTokenStore 인스턴스화는 다음과 같습니다.
@Bean
protected JwtAccessTokenConverter jwtTokenEnhancer() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setSigningKey("123456");
return converter;
}
@Bean
public JwtTokenStore getTokenStore(){
tokenStore= new JwtTokenStore(jwtTokenEnhancer());
tokenStore.setApprovalStore(new InMemoryApprovalStore());
tokenStore.setTokenEnhancer(jwtTokenEnhancer());
return tokenStore;
};
결과: InMemory ApprovalStore가 없어도 문제없이 사용자를 인증하고 토큰을 새로 고칠 수 있습니다.그러나 InMemory ApprovalStore를 토큰 저장소에 추가하는 즉시 다음 오류 메시지가 표시됩니다.
{"error":"invalid_grant","error_description":"Invalid refresh token: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NDUwMjQ2MTcsInVzZXJfbmFtZSI6IjYzZjIyYjZlLWU5MGUtNDFjYS1iYzJlLTBmZTgzNmY3MTQ2NyIsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iLCJST0xFX1VTRVIiXSwianRpIjoiMjgwMDgwNWQtMjk1Zi00ZDQzLWI2NTYtMDNlZWYwMWFkMjg0IiwiY2xpZW50X2lkIjoid2ViLWNsaWVudCIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInRydXN0Il19.BPC0HqLYjWGM0IFjvsUGGKQ9dyIXSXwMhraCVFIxD0U"}
따라서 제 두 번째 질문은 리프레시 토큰을 취소하는 적절한 방법이 무엇인가 하는 것입니다.
편집: ApprovalStore가 실제로 JWT 토큰을 취소하는 방법임을 시사하는 다음 스레드를 찾았습니다.저는 이제 그것들을 제대로 사용하는 방법을 알아봐야 합니다.
먼저, 새로 고침 토큰을 취소할 수 있는 /oauth/token과 유사한 API가 없다는 것을 확인해 줄 수 있습니까?
확인됐습니다.
정의할 필요가 없습니다.JwtTokenStore
bin, spring이 AuthorizationServerEndpointsConfigurer를 사용하여 생성합니다.
private TokenStore tokenStore() {
if (tokenStore == null) {
if (accessTokenConverter() instanceof JwtAccessTokenConverter) {
this.tokenStore = new JwtTokenStore((JwtAccessTokenConverter) accessTokenConverter());
}
else {
this.tokenStore = new InMemoryTokenStore();
}
}
return this.tokenStore;
}
private ApprovalStore approvalStore() {
if (approvalStore == null && tokenStore() != null && !isApprovalStoreDisabled()) {
TokenApprovalStore tokenApprovalStore = new TokenApprovalStore();
tokenApprovalStore.setTokenStore(tokenStore());
this.approvalStore = tokenApprovalStore;
}
return this.approvalStore;
}
따라서 제 두 번째 질문은 리프레시 토큰을 취소하는 적절한 방법이 무엇인가 하는 것입니다.
토큰에 대한 승인을 취소합니다. 이는 JwtTokenStore에서 사용되었습니다.
private void remove(String token) {
if (approvalStore != null) {
OAuth2Authentication auth = readAuthentication(token);
String clientId = auth.getOAuth2Request().getClientId();
Authentication user = auth.getUserAuthentication();
if (user != null) {
Collection<Approval> approvals = new ArrayList<Approval>();
for (String scope : auth.getOAuth2Request().getScope()) {
approvals.add(new Approval(user.getName(), clientId, scope, new Date(), ApprovalStatus.APPROVED));
}
approvalStore.revokeApprovals(approvals);
}
}
}
언급URL : https://stackoverflow.com/questions/32617645/revoke-jwt-oauth2-refresh-token
'programing' 카테고리의 다른 글
Youtube api v3 오류 "이 작업을 수행하려면 SSL이 필요합니다." (0) | 2023.10.26 |
---|---|
워드프레스 위젯에서 자동 문단 제거 (0) | 2023.10.26 |
PowerShell에서 문자열(grep)을 선택할 때 일치하는 정규식만 반환하려면 어떻게 해야 합니까? (0) | 2023.10.26 |
ES6 클래스 다중 상속 (0) | 2023.10.26 |
C에서 자체 수정 코드를 작성하는 방법은? (0) | 2023.10.26 |