OAuth 2.0

Open Standard for Authorization

2006년 Twitter와 Google이 정의한 개방형 Authorization 표준

요즘 웹, 모바일 서비스를 이용하다보면 ~~로 로그인하기로 불리는 소셜로그인을 자주 찾아볼 수 있다.

이게 OAuth이다.

작은 서비스에서는 사용자의 정보를 안전하게 저장하고 관리하는 것은 큰 부담이다. 이 부담을 다른 큰 플랫폼(구글, 페이스북, 네이버 등)에 위임하여 이용할 수 있다. OAuth는 이 위임 과정을 위한 규약이다.

2.0 버전은 1.0 버전에서 발생된 보안 문제를 개선한 버전으로,

1.0 버전에서는 프로토콜로 2.0으로 업그레이드 되면서 프레임워크로 정의되고 있다.

표준 문서 (RFC6749) : https://datatracker.ietf.org/doc/html/rfc6749

  +--------+                               +---------------+
	|        |--(A)- Authorization Request ->|   Resource    |
  |        |                               |     Owner     |
  |        |<-(B)-- Authorization Grant ---|               |
  |        |                               +---------------+
  |        |
  |        |                               +---------------+
  |        |--(C)-- Authorization Grant -->| Authorization |
  | Client |                               |     Server    |
  |        |<-(D)----- Access Token -------|               |
  |        |                               +---------------+
  |        |
  |        |                               +---------------+
  |        |--(E)----- Access Token ------>|    Resource   |
  |        |                               |     Server    |
  |        |<-(F)--- Protected Resource ---|               |
  +--------+                               +---------------+

용어

  1. Resource Owner, 자원 소유자

    우리 서비스의 사용자를 말한다.

    구글 로그인을 통해서 구글의 유저 정보를 가져오는 상황이라면 그 구글 유저 자원에 대한 소유자로 이해할 수 있다.

  2. Client, 클라이언트

    OAuth 2.0을 통해서 타사 서비스의 자원을 이용하고자하는 주체를 말한다.

    내가 개발하고 있는 서비스가 클라이언트가 된다. (내가 개발하고 있는 서버가 클라이언트가 된다..!!!)

    구글입장에서의 클라이언트라고 생각하면 편할 것 같다.

  3. Authorization Server, 인가 서버

    인가 처리를 담당하는 서버이다.

    클라이언트에 ID, Secret을 부여하고, Code를 발급하거나 Token을 발급한다.

  4. Resource Server, 자원 서버

    클라이언트에서 사용하고자 하는 자원(여기서는 유저 정보)를 가지고있는 서버이다.

    클라이언트는 인가서버에서 발급받은 토큰으로 자원 서버에 접근해서 원하는 자원을 이용할 수 있다.

적용한 매커니즘

(서버와 클라이언트가 헷갈릴 수 있어 프론트엔드, 백엔드 용어로 작성했습니다.)