Spring

OAuth2 Grant 타입

Arthur Kim 2021. 12. 22. 12:35
  • 애플리케이션 ( client application ) : 여기서 클라이언트의 서버를 뜻함.
  • OAuth2 서비스 : 여기서 인증 서버를 뜻함
  • 서비스 : 여기서 OAuth2를 통해 접근 가능한 서비스를 뜻함.
  • 자격증명 ( credential ) : 로그인 정보 ( id, password )등 개인 신상과 관련해 암호화한 정보

패스워드 그랜트

 

  • 가장 직관적인 그랜트 타입
  • 애플리케이션과 서비스가 서로를 명백하게 신뢰하는 경우에 사용
  • 애플리케이션이 자격증명을 받아 직접 OAuth2 서비스에서 인증
  • AccessToken을 받기위한 구성요소 : 애플케이션 이름, 시크릿 키, 자격증명 ( credential )

 

클라이언트 그랜트

 

  • 사용자가 없고, 동일한 회사가 두 애플리케이션을 소유할 때 사용
  • 예를 들면, 로그/데이터 분석 애플리케이션에서 서비스를 이용하고자 할 때
  • 자격증명 없이, 애플리케이션 이름과 시크릿 키만 사용해 인증
  • AccessToken을 받기위한 구성요소 : 애플케이션 이름, 시크릿 키

 

인가 코드 그랜트

 

  • 가장 복잡한 그랜트 타입
  • 자격증명을 애플리케이션간 공유하지 않고, 서비스를 이용하고자 할 때 사용
  • 사전접근 ( pre-access ) 를 통해 인가 코드 ( Authentication ) 을 확인하는 단계가 추가
  • 애플리케이션 구성시, OAuth2 로그인 페이지 URL을 추가한다. ( => 로그인 과정을 OAuth2 서비스에 위임한다 )
  • 애플리케이션 소유자는 애플리케이션으로 돌아오는 콜백 URL을 OAuth2에 등록해야한다. ( => 위임된 로그인 과정이 끝난 후, 애플리케이션으로 돌아오기 위함 )
  • AccessToken을 받기위한 구성요소 : 애플케이션 이름, 시크릿 키, 인가 코드 ( Authentication )

 

암시적 그랜트

 

  • 서버 측 호출에 의존하지 않는 순수 js기반 어플리케이션이나 모바일 앱에서 사용
  • 다른 그랜트 타입과 달리 애플리케이션 서버가 없다. UI 클라이언트가 직접 모든 서비스와 상호 통신.
  • 클라이언트 소유자는 OAuth2 서비스에 클라이언트 이름과 OAuth2 액세스 토큰과 함께 사용자를 리다이렉션할 콜백 URL을 등록한다.
  • UI 클라이언트가 OAuth2 서비스를 호출하면 클라이언트 이름을 제시하고 사용자 인증을 한다.
  • 인증 성공시, OAuth2 액세스 토큰과 함께 사용자를 리다이렉션한다. ( 토큰은 URL의 쿼리의 매개변수로 전달 )
  • 브라우저에 OAuth2 액세스 토큰이 노출되는 유일한 그랜트 타입 => 공격과 오용에 더 취약하다
  • 토큰의 수명은 짧아야 하고 ( 1-2 시간 ), 리프레시 토큰은 지원하지 않는다.
  • AccessToken을 받기위한 구성요소 : 애플케이션 이름, 자격증명 ( credential )