본문 바로가기
FullStack/10. WeB

OAuth 2.0 그랜트 타입 종류 및 토큰 개념

by nakanara 2020. 3. 10.
반응형

OAuth 2.0

OAuth 2.0 인증 종류

  1. Authorization Code Grant
  • 서버사이드 코드로 인증하는 방식
  • AuthorizationServer는 로그인 기능 제공
  • 권한 서버가 클라이언트와 리소스 서버 간의 중재 역할
  • Access Token을 바로 클라이언트로 전달하지 않아 잠재적 유출을 방지
  • 로그인 시에 페이지 URL에 response_type=code 설정
  1. Implicit Grant
  • token과 scope에 대한 스펙 등은 다르지만 OAuth 1.0a과 가장 비슷한 인증 방식
  • Public Client인 브라우저 기반의 애플리케이션(Javascript application)이나 모바일 애플리케이션에서 이 방식 사용
  • OAuth 2.0에서 가장 많이 사용하는 방식
  • 권한 코드 없이 바로 발급되어 보안에 취약
  • 주로 Read Only 서비스에 사용
  • 로그인 시 페이지 URL에 response_type=token 설정
  1. Resource Owner Password Credentials Grant
  • Client에 계정 정보 저장 후 직접 access token을 받아오는 방식
  • Client를 믿을 수 없을 때에는 사용하기에 위험하기 때문에 API 서비스의 공식 애플리케이션이나 믿을 수 있는 Client에 한해서만 사용을 추천
  • 로그인 시에 API에 POST로 grant_type=password로 전달
  1. Client Credentials Grant
  • 애플리케이션이 Confidential Client일 때 id와 secret을 가지고 인증하는 방식
  • 로그인 시 API에 POST로 grant_type=client_credentials 전달

Token

  • Access Token

위 4가지 권한 요청 방식 모두 절차를 정상적으로 처리된 경우 클라이언트에게 Access Token이 발급, 이 토큰은 보호된 리소스에 접근할 때 권한 용도로 사용됩니다
문자열로 반환되며 클라이언트에서 발급된 권한을 대변하게 됩니다. 계정 정보 등 인증에 필요한 형태들을 이 토큰 하나로 표현함으로써, 리소스 서버는 여러 가지 인증 방식에 각각 대응하지 않아도 권한을 확인할 수 있습니다.

  • Refresh Token

한번 발급받은 Access Token은 사용할 수 있는 시간은 제한되어 있습니다. 사용하고 있던 Access Token이 유효기간 종료 등으로 만료되면, 새로운 Access Token을 취득해야 하는데 그때 Refresh Token을 사용합니다.
권한 서버가 Access Token을 발급해주는 시점에서 Refresh Token도 함께 발급하여 클라이언트에게 전달되기 때문에, 전용 발급 절차 없이 Refresh Token을 미리 가지고 있을 수 있습니다.
토큰의 형태는 Access Token과 동일하게 문자열 형태입니다.

  • 토큰의 갱신 과정

클라이언트가 권한 증서를 가지고 권한 서버에 Access Token을 요청하면, 권한 서버는 Access Token과 Refresh Toeken을 함께 클라이언트에게 전달됩니다.
그 이후 클라이언트는 Access Token을 사용하여 리소스들을 요청하는 과정을 반복하며, 일정 시간이 흐른 후 액세스 토큰이 만료되면, 리소스 서버는 이후 요청들에 대해 정상 결과 대신 인증 만료 오류를 응답하게 되며,
그 시점에 Refresh Token을 이용하여 새로운 Access Token을 새롭게 발급받을 수 있습니다.

참고

반응형

'FullStack > 10. WeB' 카테고리의 다른 글

[JSP] POJO에서 RequestBody 수신하기  (0) 2020.10.27
[JS] FormData 객체 내용 확인 방법  (0) 2020.03.11
MSSQL 테스트 환경 설정 및 JDBC 접속 방법  (0) 2020.02.26
CSS POSITION  (0) 2019.12.22
[UI] handlebars.js  (0) 2015.07.08