Post

OAuth 2.0

스프링 시큐리티 정리(진행중

학습 목적

Spring Security, OAuth 2.0, OpenID Connect 에 관한 이해

깃허브 URL

깃허브 URL - 1 깃허브 URL - 2

OAuth2 왜 쓰는가

OAuthOpen Authorizaiton 의 줄임말이다. 이름에서 목적이 드러난다.

  • Open 되어 있으며
  • Authorization 을 담당한다.

Authentication 은 다른데서 받고, Authorization 에 관한 ROLES & SCOPES 만을 보겠다는 의지가 드러난다.

즉, 간단히 말해 Google 계정만 가지고 있으면 다른 수 많은 사이트에 아이디, 비밀번호 입력해서 가입하는 것이 아니라 구글 계정으로 로그인 버튼 하나만 누르면 바로 사용가능 한 것이다.

image

image

OpenID Connect

OAuth2.0 을 기반으로 인증 방식을 표준화 시킨 인증 프로토콜이다. 줄여서 OIDC 부른다. 구글, 카카오는 OIDC 를 지원한다.

OIDC 를 지원하는 서비스 제공자에서 토큰을 요청하면 필요한 정보만 간결하게 제공한다. OIDC 가 적용되지 않은 토큰은 표준화가 안되어있어 지저분하다.

요청 scopeopenid 를 포함시키면 된다. 샘플 응답은 다음과 같이 온다.

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

image

스프링 프레임워크가 지원하는 다른 라이브러리와 마찬가지로, .properties 혹은 .yml 파일에 필요한 설정값을 제공하면, 자동설정 과정으로 모든 일이 진행된다. 간략히 도식화하면 다음과 같다.

image

image

Access Token 교환 과정

image

OAuth2UserService

Access Token 을 사용해서 UserInfo 엔드포인트로 요청한 뒤, 최종 사용자(= 리소스 소유자) 속성을 가져온다. 해당 속성을 OAuth2User 타입의 객체로 리턴한다. OAuth2User 인터페이스의 구현체로는 DefaultOAuth2UserService, OidcUserService 가 제공된다.

여러개의 인가서버에서 데이터를 가져온 사용자 데이터를 하나로 묶어야 할 때 이를 기준으로 만들면된다.

image

This post is licensed under CC BY 4.0 by the author.