본문 바로가기

Backend/Spring | SpringBoot

[Oauth2] 회고 1

반응형

Q1. OAuth2 제공자에서 사용자를 식별하고 Spring Security Config에서 filterChain에 지정한 .loginPage로 redirect가 됨

➡️ 사용자 인증에 실패했기 때문에 따로 FailureHandler를 설정하지 않으면 로그인 페이지로 돌아감

 

Q2. Handler가 실행되기 전에 error가 발생

➡️ 인증의 단계조차 가기 전에 실패했음을 의미

내가 생각 하는 흐름

(1) → .loginPage()

(2) → /oauth2/authorization/{provider}

(3) → oauth.yml의 provider의 authorization-uri

(4) → oauth.yml의 registration의 redirect-uri 

(5) → userDetailService

(6) → userDetailService + SuccessHandler

에서 Configuration이 가능하다고 생각한다.

 

Q3. No AuthenticationProvider found for ~ 에러 발생

No AuthenticationProvider found for org.springframework.security.oauth2.client.authentication.OAuth2LoginAuthenticationToken

 

➡️ 근본적인 원인은 provider확인이 불가능 하기 때문에 이런 현상이 나타난다고 한다.

기본적으로는 Custom한 UserDetailsService 빈을 생성하는 경우 AuthenticationProvider에 대한 빈을 수동으로 정의할 필요가 없습니다. 왜냐하면 기본적으로 DaoAuthenticationProvider 빈이 자동으로 생성되어 정의된 UserDetailsService 빈을 자동으로 선택하기 때문입니다.
그러나 2개 이상의 UserDetailsService 빈을 정의하는 경우 자체 인증 공급자를 정의해야 합니다. UserDetailsService 인터페이스를 구현하고 주석이 달린 다른 클래스가 있다는 것을 깨닫지 못해서 실수를 했습니다.@service, 두 번째 UserDetailsService 빈을 생성합니다.

 

라고 한다. 나의 경우에는 UserDetailsService 빈을 WebLogin일때와 Oauth2일때 로 나누어 사용했기 때문에 이러한 케이스가 생긴것이라고 판단했다.

 

Q4. 그렇다면 Provider구분은 어떻게 진행해야할까?

➡️ 도움받은 글 : https://velog.io/@sa833591/Spring-Security-3

 

Spring Security (3) - AuthenticationManager, AuthenticationProvider 동작 흐름 분석

AuthenticationFlow사용자 아이디/비밀번호를 인증처리하는 과정으로 Spring Security에서는 AuthenticationManager, AuthenticationProvider가 있다.Manager은 쉽게 말해서 공장 안에서 작업 처리를 지시하는 매니

velog.io

 

Provider를 구분지어 사용하기 위해서는 Manager로 지정을 해주어야 한다.

Manager로 지정을 하게 되면 Provider가 작업을 하는 형식으로 이해하면 편하다고 한다.

 

글을 읽던 중 JWT토큰을 이용해 Authentication으로 인증을 진행하는 것을 보고 떠오른 것이 있었다.

JwtAuthenticationFilter에서 토큰을 가져와서 Provider를 구분할 수 있을까? 하는 것이었다.

반응형

'Backend > Spring | SpringBoot' 카테고리의 다른 글

[OAuth2] 회고3  (0) 2024.06.14
[Oauth2] 회고2  (0) 2024.06.12
[egovFramework] spring message이용  (0) 2024.05.17
[Spring Security] Header정보 추가 시점  (0) 2024.05.10
[Spring] Spring Errors  (0) 2024.05.09