OAuth 2.0
학습 목적
Spring Security
, OAuth 2.0
, OpenID Connect
에 관한 이해
깃허브 URL
OAuth2 왜 쓰는가
OAuth
는 Open Authorizaiton
의 줄임말이다. 이름에서 목적이 드러난다.
Open
되어 있으며Authorization
을 담당한다.
Authentication
은 다른데서 받고, Authorization
에 관한 ROLES & SCOPES
만을 보겠다는 의지가 드러난다.
즉, 간단히 말해 Google
계정만 가지고 있으면 다른 수 많은 사이트에 아이디, 비밀번호 입력해서 가입하는 것이 아니라 구글 계정으로 로그인
버튼 하나만 누르면 바로 사용가능 한 것이다.
OpenID Connect
OAuth2.0 을 기반으로 인증 방식을 표준화 시킨 인증 프로토콜이다. 줄여서 OIDC 부른다. 구글, 카카오는 OIDC 를 지원한다.
OIDC 를 지원하는 서비스 제공자에서 토큰을 요청하면 필요한 정보만 간결하게 제공한다. OIDC 가 적용되지 않은 토큰은 표준화가 안되어있어 지저분하다.
요청 scope
에 openid
를 포함시키면 된다. 샘플 응답은 다음과 같이 온다.
1
2
3
4
5
6
7
8
{
"sub" : "83692",
"name" : "Alice Adams",
"given_name" : "Alice",
"family_name" : "Adams",
"email" : "alice@example.com",
"picture" : "https://example.com/83692/photo.jpg"
}
ClientRegistration
스프링 프레임워크가 지원하는 다른 라이브러리와 마찬가지로, .properties 혹은 .yml 파일에 필요한 설정값을 제공하면, 자동설정 과정으로 모든 일이 진행된다. 간략히 도식화하면 다음과 같다.
Access Token 교환 과정
OAuth2UserService
Access Token 을 사용해서 UserInfo 엔드포인트로 요청한 뒤, 최종 사용자(= 리소스 소유자) 속성을 가져온다. 해당 속성을 OAuth2User 타입의 객체로 리턴한다. OAuth2User 인터페이스의 구현체로는 DefaultOAuth2UserService, OidcUserService 가 제공된다.
여러개의 인가서버에서 데이터를 가져온 사용자 데이터를 하나로 묶어야 할 때 이를 기준으로 만들면된다.