inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 시큐리티 OAuth2

oidc userinfo 확인 시 오류가 납니다.

306

aanicall

작성한 질문수 10

0

안녕하세요. 강의 잘 보고 많은 부분 배워가고 있습니다.

강의 진행중 섹션 7의

OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개(2)에서

뒷부분 oidc로 사용자 정보 조회하는 부분인데요.

 

@GetMapping("/oidc")
public OAuth2User oidc(String accessToken, String idToken)
{
    ClientRegistration clientRegistration = clientRegistrationRepository.findByRegistrationId("keycloak");
    OAuth2AccessToken oAuth2AccessToken = new OAuth2AccessToken(OAuth2AccessToken.TokenType.BEARER, accessToken, Instant.now(), Instant.MAX);

    Map<String, Object> idTokenClaims = new HashMap<>();
    idTokenClaims.put(IdTokenClaimNames.ISS, "http://localhost:9091/realms/oauth2");
    idTokenClaims.put(IdTokenClaimNames.SUB, "OIDC0");
    idTokenClaims.put("preferred_username", "userpww");

    OidcIdToken oidcIdToken = new OidcIdToken(idToken, Instant.now(), Instant.MAX, idTokenClaims);

    OidcUserRequest oAuth2UserRequest = new OidcUserRequest(clientRegistration, oAuth2AccessToken, oidcIdToken);
    OidcUserService oidcUserService = new OidcUserService();
    OAuth2User oAuth2User = oidcUserService.loadUser(oAuth2UserRequest);

    return oAuth2User;
}

oidcUserService.loadUser(oAuth2UserRequest); 이 부분이 실행될 때

loadUser 메서드 내부의

if (!userInfo.getSubject().equals(userRequest.getIdToken().getSubject())) {
          OAuth2Error oauth2Error = new OAuth2Error(INVALID_USER_INFO_RESPONSE_ERROR_CODE);
          throw new OAuth2AuthenticationException(oauth2Error, oauth2Error.toString());
       }

이 부분을 타면서 예외가 발생합니다. 어떤 부분을 확인해 봐야 할까요?

userInfo의 sub와

userRequest의 sub가 달라서 그런걸까요?

읽어주셔서 감사합니다.

java spring spring-boot oauth

답변 2

0

정수원

정확하게 오류메시지가 어떻게 출력되는가요?

sub 을 OIDC0 을 제외하고 실행해 보시기 바랍니다.

0

인프런 AI 인턴

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

oidcUserService.loadUser 메서드에서 예외가 발생하는 이유는 userInfosub 값과 userRequest의 idToken에서 추출한 sub 값이 다르기 때문인 것으로 보입니다. UserInfo의 sub 값과 idToken의 sub 값은 같아야 정상적으로 인증 처리가 진행됩니다. 이 문제를 해결하기 위해 다음 점을 확인해보세요.

  1. idTokenClaims에 설정한 sub 값이 실제로 ID Token 발급자(예: 인증 서버)에 의해 발급된 ID Token의 sub 값과 정확히 일치하는지 확인하세요. sub 값은 사용자를 식별하는 고유한 식별자이므로, 이 값이 일치하지 않으면 인증 과정에서 오류가 발생할 수 있습니다.

  2. ClientRegistration에서 설정한 issuer-uri 값이 실제 ID Token 발급자의 issuer 값과 일치하는지 확인하세요. 만약 issuer-uri 설정이 잘못되어 있거나, issuer 값이 예상과 다르게 설정되어 있다면, ID Token 검증 과정에서 문제가 발생할 수 있습니다.

  3. OAuth2UserRequest 생성 시 사용되는 clientRegistration 정보가 올바른지 확인하세요. findByRegistrationId("keycloak")으로 검색한 ClientRegistration 정보가 실제로 사용하려는 OAuth2 클라이언트 설정과 일치하는지 점검해보는 것이 중요합니다.

  4. Debugging을 통해 idTokenClaims나 OidcIdToken 객체가 올바르게 생성되었는지, OidcUserRequest 생성 과정에서 예상대로 동작하는지 상세하게 확인해보세요.

이러한 점검을 통해 문제의 원인을 좁혀나가다 보면, 예외 처리의 정확한 원인을 파악하고 해결 방안을 찾을 수 있을 것입니다.

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

0

74

1

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

0

74

2

JWT 조회 에 대한 질문

0

69

1

password grant 방식 에러 응답

0

85

3

FormLoginConfigure에서 생성하는 필터

0

75

2

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

0

282

2

Jdbc 관련 강의 및 깃헙 문의

0

75

1

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

0

207

1

UserInfo 엔드포인트 요청 실습

0

72

1

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

0

148

1

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

0

136

2

OIDC SSO 관련 질문 입니다.

0

129

1

AuthenticationEntryPoint 강의 누락 문의

0

120

1

cors설정방법

0

115

1

jwt decoder 토큰 검증 시 질문

0

218

1

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

0

183

2

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

0

138

2

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

1

524

1

CustomOAuth2AuthenticationFilter 구현 중 질문

0

144

2

AuthenticationManager 생성시점

0

116

1

FormLogin과 Oauth2Client 둘 중 사용하는 시점

0

125

1

postman userinfo 엔드포인트 질문

0

130

2

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

0

113

1

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

0

198

1