inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 시큐리티 OAuth2

연동구현 (2)

Token Decoder

573

leese

작성한 질문수 11

0

저는 업무 환경 상 버전이 다르게 진행하고 있고,

org.springframework.boot version "3.2.1"

security version "6.2.1"

개념과 과정을 강의를 통해 도움 받고 있습니다.

궁금한 것은 Authorization Server 에서 강사님이 설정하신 바와 같이 JwtSource 설정을 넣으니, Resource Server 에서 다른 알고리즘으로 파싱이 안된다는 에러가 나더라구요.

@Bean
public JWKSource<SecurityContext> jwkSource() throws NoSuchAlgorithmException { 
  RSAKey rsaKey = generateRsa(); 
  JWKSet jwkSet = new JWKSet(rsaKey); 
  return (jwkSelector, context) -> jwkSele  ctor.select(jwkSet);
}

[DefaultJWTProcessor]

new BadJOSEException("Signed JWT rejected: Another algorithm expected, or no matching key(s) found");

 

Authorization server 에서 Token발행 과정을 디버깅하면

DelegatingOAuth2TokenGenerator > JwtGenerator

에서 alg : RS256, encoder 는 NimbusJwtEncoder 로 토큰이 저장됩니다.

 

Resource 서버에서 NimbusJwtDecoder 를 통해 진행되기는 하나 header key 가 RSA 로 들어오던데요.

 

Authorization server 의 jwkSource 설정을 모두 주석처리하니, 더 이상 키 불일치 에러는 발생하지 않더라구요.

 

버전 상의 문제일지 양쪽 서버에 뭔가 다른 설정이 필요했을지 궁금해서 문의 남깁니다.

 

java spring spring-boot oauth

답변 2

0

정수원

인가서버에서 별도의 설정을 하지 않으면 일반적으로 RSA256 알고리즘으로 토큰이 발행됩니다.

그리고 Resource Server 는 spring.security.oauth2.resourceserver.jwt.jwk-set-uri 설정에 의해 인가서버로부터 JWKSet 정보를 가지고 와서 토큰을 검증하기 때문에 Resource Server 에서 NimbusJwtDecoder 의 알고리즘을 별도로 설정하지 않았다면 불일치 문제가 발생하지는 않습니다.
두 서버의 알고리즘 설정을 다시 확인해 보시기 바랍니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

leese님의 문제는 Authorization Server와 Resource Server 간의 JWT 토큰 처리에서 발생하는 알고리즘 불일치 문제로 보입니다.

말씀해주신 코드를 보면, Authorization Server에서 사용하는 JWKSource는 RSA 알고리즘을 사용하여 RSAKey를 생성하고 있습니다. 이때 RS256 알고리즘을 통해 Jwt가 인코딩되고 있는 것 같습니다. Authorization Server에서 발행한 JWT 토큰은 해당 서버의 jwkSource 설정에 따라 서명이 이루어집니다.

Resource Server에서는 NimbusJwtDecoder를 사용하여 JWT를 디코드하고 인증을 수행합니다. 이 과정 중 알고리즘 불일치 에러가 발생하는 경우, 두 가지 가능성을 확인해 볼 수 있습니다.

  1. Resource Server가 사용하는 JwtDecoder가 Authorization Server에서 사용된 알고리즘과 다른 알고리즘으로 디코드를 시도하고 있는 경우
  2. Resource Server에서 사용하는 JWKSet URI가 잘못 지정되었거나, 해당 URI를 통해 제공되는 JWKSet이 맞지 않는 경우

위의 설정들과 관련해서 spring.security.oauth2.resourceserver.jwt.jwk-set-uri 속성에 Authorization Server의 JWKSet URI를 정확히 지정했는지 확인하시고, Resource Server에서 해당 URI를 통해 정상적으로 JWKSet을 가져오고 있는지 확인해보셔야 합니다.

또한, spring.security.oauth2.resourceserver.jwt.jws-algorithms 속성을 통해 기대하는 알고리즘을 명시적으로 지정해보실 수도 있습니다.

문제의 원인 분석 및 해결을 위해 Spring Boot와 Spring Security의 버전을 확인하여 해당 버전에서 권장하는 설정 방법을 참고하는 것이 좋습니다.

추가적으로 질문하신 내용에 대한 자세한 참고자료를 아래 URL에서 확인하실 수 있습니다.

authorization-server 라이브러리 질문이 있습니다.

0

75

1

loadUser 중 Missing attribute 'preferred_username' in attributes 에러 발생

0

76

2

JWT 조회 에 대한 질문

0

70

1

password grant 방식 에러 응답

0

88

3

FormLoginConfigure에서 생성하는 필터

0

76

2

현업에서 springboot를 3.5.5 를 사용해서 공부중인데...

0

282

2

Jdbc 관련 강의 및 깃헙 문의

0

77

1

OAuth2AuthorizedClient 이해 및 활용 강의 내용 질문

0

208

1

UserInfo 엔드포인트 요청 실습

0

73

1

RFC 문서에서의 AccessToken 발급 방식 궁금한점

0

150

1

강의자료.zip 를 다운로드 받았는데 압축이 풀리지 않습니다. 확인 부탁드려요

0

139

2

OIDC SSO 관련 질문 입니다.

0

130

1

AuthenticationEntryPoint 강의 누락 문의

0

121

1

cors설정방법

0

115

1

jwt decoder 토큰 검증 시 질문

0

221

1

클라이언트에서 userinfo 엔드포인트 호출 시 질문

0

184

2

JOSE 구성요소의 api에 관한 질문

0

140

2

스프링 부트 3버전으로 따라가시는 분들 참고하세요

1

527

1

CustomOAuth2AuthenticationFilter 구현 중 질문

0

145

2

AuthenticationManager 생성시점

0

117

1

FormLogin과 Oauth2Client 둘 중 사용하는 시점

0

127

1

postman userinfo 엔드포인트 질문

0

135

2

강의 수강신청하고 듣기 전입니다 질문있습니다.

0

113

1

인증 코드를 통해 발급 받은 토큰의 관리

0

198

1