Oauth2 Invalid credentials 에러

Gonee·2023년 11월 27일

삽질공간

목록 보기
4/6

Oauth2 Invalid credentials 에러

oauth2 클라이언트 서버의 수정이 없었는데, 테스트 환경에서만 아래의 에러가 발생했습니다.
수정된 부분이 없는데, 특정 서버만 에러가 발생해서 당황......

주로 발생하는 원인

  1. 잘못된 클라이언트 ID 또는 비밀번호: OAuth 2.0을 사용할 때 클라이언트 ID와 비밀번호가 서비스 제공자에 의해 발급되는데 이 정보가 잘못 전달되면 발생할 수 있음

  2. 만료된 토큰: 유효기간이 만료된 액세스 토큰과 리프레시 토큰을 전달할 경우

  3. 리디렉션 URI 불일치: OAuth 2.0 인증 과정에서 클라이언트가 제공하는 리디렉션 URI가 서비스 제공자에 등록된 URI와 일치하지 않는 경우

  4. 스코프 불일치: 요청된 스코프가 클라이언트의 등록된 스코프와 일치하지 않거나 스코프에 대한 권한이 부여되지 않은 경우

  5. 계정 또는 액세스 제한: 사용자의 계정에 문제가 있거나 특정 서비스에 대한 액세스가 제한되어 있는 경우

  6. 서버 오류 또는 구성 문제: 서비스 제공자 측의 서버 오류나 구성 문제

해결 과정

  • oauth 라이브러리를 debug로 하여 모든 인증 과정을 log 다 출력
  • 정상 케이스와 에러 케이스의 debug 로그를 하나씩 비교하여 어느 부분에서 에러가 발생했는지 확인
2023:11:16 18:06:45.530 DEBUG 11028 [reactor-http-nio-2] o.s.s.w.s.u.m.PathPatternParserServerWebExchangeMatcher[matches:95] : Checking match of request : '/login/oauth2/code/{PROVIDER}'; against '/login/oauth2/code/{registrationId}'
2023:11:16 18:06:45.811 DEBUG 11028 [reactor-http-nio-5] o.s.s.w.s.a.AuthenticationWebFilter[lambda$authenticate$8:127] : Authentication failed: [invalid_token_response] An error occurred parsing the Access Token response: Content type 'text/html;charset=utf-8' not supported for bodyType=java.util.Map<java.lang.String, java.lang.Object>
  • 변경 지점 확인, oauth 제공 서버에서 spring.jackson.property-naming-strategy=LOWER_CAMEL_CASE 로 변경한 사실을 확인
  • 위 변경점을 다시 default 설정(SNAKE_CASE)로 변경하니, client 측의 에러가 사라짐

jackson의 property-naming-strategy와 Access Token 요청에 대한 응답의 content-type이 직접 적인 관계는 없다고 생각되는데, client 의 라이브러리에서 역직렬화 하는 과정에서 CAMEL_CASE 를 제대로 처리하지 못한 것으로 의심하고 있음

추후에 무슨 연관 관계가 있는지 면밀히 조사해볼 필요가 있으며 디버깅을 통해서 라이브러리의 어느 지점에서 에러가 발생했는지 파악하는 과정이 매우 흥미로웠음. 아직 의문이 완벽하게 풀리지는 않았지만, Spring security 를 디버깅해본 아주 재밌는 경험이였음.

profile
서버 개발자

0개의 댓글