OAuth2

본 글은 네이버 부스트캠프를 위해 학습한 내용을 노션에서 이전한 게시글입니다.


OAuth2란

  • 인증을 위한 개방향 표준 프로토콜
  • Third-Party 프로그램에게 리소스 소유자를 대신에 리소스 서버에서 제공하는 자원에 대한 접근 원한을 위임하는 방식으로 작동
  • 구글, 페이스북 등 외부 소셜 계정을 기반으로 간편하게 인증하는 기능

OAuth2 제공자

  • 구글
  • 페이스북
  • 카카오
  • 네이버

먼저 알아야 할 용어

  • Authentication(인증) : 인증, 접근 자격이 있는지 검증하는 단계
  • Authorization(인가) : 자원에 접근할 권한을 부여하고 리소스 접근 권한이 있는 Access Token을 제공
  • Access Token : 리소스 서버에게서 정보를 획득할 때 사용하는 토큰, 만료 기간이 있음
  • Refresh Token : Access Token이 만료 시 재발급 받기 위한 용도로 사용하는 Token

OAuth 역할별 용어

  • client : 우리가 개발한 서비스(service), 어플리케이션(Application)을 의미
  • Resource Owner : 리소스 소유자, 자격을 승인하는 주체 (ex: 구글 로그인을 할 사용자)
  • Resource Server : 구글, 페이스북, 카카오, 네이버 등의 회사를 의미, client와 resource owner가 사용하는 자원들을 관리하여 유효성을 체크
  • Authorization Server : 권한을 부여해주는 서버, 사용자 ID/PW를 넘겨 Authorization Code를 발급받을 수 있음, Client → Authorization Code를 넘겨 Token을 발급받을 수 있음

시퀀스 다이어그램 플로우

image

  • 그림에는 Refresh Token이 없지만, Access Token을 발급 해 주면서 Refrsh Token 또한 같이 발급됨
    • Access Token이 만료 될 시 Refresh Token을 사용하여 재로그인 없이 Access Token을 재발급

OAuth2.0 권한 부여 방식

1. Authorization Code Grant - 권한 부여 승인 코드 방식

  • 권한 부여 승인 요청 시 response_type=code, grant_type=authorization_code으로 지정하여 요청하는 방식
    • 가장 기본이 되는 방식
  • Refresh Token 사용 가능

2. Implicit Grant - 암묵적 승인 방식

  • 자격 증명을 안전하게 저장하기 힘든 클라이언트(ex: javascript)에게 최적화된 방식
  • response_type = token으로 요청
  • 권한 부여 승인 코드 없이 바로 Access Token이 발급
    • 노출 위험 방지를 위해 일반적으로 만료기간을 짧게 설정함
  • Refresh Token 사용이 불가능
  • Access Token이 URL로 전달된다는 단점이 있음(위험)

3. Resource Owner Password Credentials Grant - 자원 소유자 자격증명 승인 방식

  • 간단하게 username, password로 Access Token을 받는 방식으로 grant_type = password로 요청
  • 클라이언트가 자신의 서비스에서 제공하는 어플리케이션일 경우에만 사용하는 방식
  • Refrsh Token 사용 가능

4. Client Credentials Grant - 클라이언트 자격증명 승인 방식

  • 클라이언트의 자격증명만으로 Access Token을 획득하는 방식으로 grant_type = client_credentials 로 요청
  • 자격증명을 안전하게 보관할 수 있는 클라이언트에만 사용
  • Refresh Token은 사용 불가능

Reference

OAuth2.0 개념 및 작동방식