Open dbwp031 opened 10 months ago
OAuth2.0 기존에는 우리가 직접 회원을 관리하고 있었음. 회원의 민감 정보를 직접 관리해야 함. 보안이 매우 중요함. 법적인 문제가 있음.
인증 책임을 외부에 위임.
다양한 방식이 있음. 전적으로 맡기는 방법. 혹은 인증한 후 회원의 정보를 우리 DB에 저장하는 방법. 우린 후자. 로그인 뒤 일부를 회원 테이블에 동기화시켜 가입시키는 방법.
redirect uri
OAuth를 통해 인증을 마친 후, 되돌아올 uri가 필요하다.
기본 redirect URI: {baseUrl}/login/oauth2/code/{registrationId}
이때 registrationId
는 ClientRegistration
의 유니크 식별자이다.
Client?
우리는 다른 인증 서비스 서버에 접근하는 거니까 Client
이다.
Client Secret Key
REST Api를 사용할 때 필요하다. ClientId
에 대한 비밀 키.
Registration
spring.security.oauth2.client.registration
은 OAuth Client properties를 위한 설정 prefix이다.ClientRegistration
을 위한 prefix이다. (kakao
, google
등)client-id
, client-secret
등이 있다.Provider
OAuth2.0 인증 서비스 제공자 (facebook, google, kakao, ...)
ProviderId
필요
OAuth2.0
혹은 OpenID Connect 1.0
의 Provider로 등록된 표현이다.
가지고 있는 정보
client id
client secret
authorization grant type
redirect URI
scopes
authorization URI
token URI
OAuth Grant Types
유저 정보가 필요할 때
BoardPrincipal
BoardPrincipal은 UserDetails
를 구현함으로써 Spring Security에서 인식할 수 있도록 해주었다.
OAuth2User
을 구현하여 OAuth에서 필요로 하는 내용들을 구현한다.
getName()
: 유저 식별정보getAttributes() {Map<String, Object>}
: key-value 방식으로 유저에 대한 정보들을 전달해준다.OAuth2UserService<OAuth2UserRequest, OAuth2User>
@FunctionalInterface
-> 람다식 지원loadUser
를 구현해야 함.DefaultOAuth2UserService
가 기본 유저서비스UserAccountService로 public Optional<UserAccountDto> searchUser(String username)
함수를 정의했다.
UserAccountDto를 곧바로 리턴하지 않고 Optional로 감싸서 리턴하는 경우, 예외 처리를 함수 내부에서 직접하지 않고 외부(상위)에서 처리해줄 수 있다.
보안 설정 강화
카카오톡 로그인 기능을 구현하기 위한 공부 내용을 정리한다.