OAuth

Younghwan Cha·2023년 2월 25일
0

Auth

목록 보기
4/7

우리는 다양한 사이트들에 접속하면서 그에 따른 로그인 요청들을 받는다.
로그인 페이지가 나오면 가장 먼저 찾는 것은 아마도 네이버, 카카오, 구글 등과
연동한 간편 로그인일 것이다.
간편 로그인을 통해서 몇번의 클릭만으로 사이트에 로그인하고 다양한 권한들을
사용할 수 있게 된다. 이러한 기능들을 Oauth 라고 한다.

OAuth 등장 배경

예전 client-server 인증 모델들의 경우,
resource server 의 정보를 가져오기 위해서 resource owner 의 인증 정보를 그대로 가져가서 사용했다.
OAuth 가 등장하기 이전의 이러한 인증 모델들에는 다양한 문제점들이 있었다.

  • 애플리케이션은 사용자가 다양한 기능들을 사용할 수 있도록
    사용자의 인증을, 특히 그중 password 를 clear-text 형식으로 저장해야 했다.
  • server 는 password authentication 을 제공해야한다.
  • application 은 사용자 정보에 관해 방대한 범위의 접근 권한을 갖게된다.
  • resource owner 는 개별 application 에 권한 부여를 취소 할 수 없었고, 권한 부여를 취소하기 위해서는 구글과 같은 정보 제공하는 곳의 비밀번호를 바꿔야했다.

이를 개선하기 위해서 나온것이 OAuth 이다.
기존에 resource owner 의 인증 정보를 사용하는 대신, client 는 access token 을 부여받는다.
이 access token 은 specific scope, lifetime, 그리고 다른 access attributes 들을 포함하고 있다.
authorization server 는 resource owner 의 동의를 받고 client 에게 access token 을 부여한다.

예를 들어, A 가 client 에게 자신의 이름, 비밀번호는 제공하지 않고 오직 resource server 에 있는 사진에 대한
복사 권한만을 부여 할 수 있게된다. 이를 위해서 사용자는 authorization server 로 부터 특정 access token 을 전달받으면 된다.

회원가입을 할 때마다 매번 자신의 개인정보가 유출 될 위험요소가 추가되는 꼴이기 때문이다.
또한 애플리케이션이 모든 권한을 갖게 되기 때문에 위험 부담은 더욱 높아졌다. 이를 해결하기 위해서 트위터에서 들고 나온 것이 바로 오늘의 주인공 OAuth 이다.

문제 해결사, OAuth

  1. resource Owner
    사용자, protected resource 에 권한 부여자
  2. resource Server
    protected resource 를 호스팅 하는 서버,
    protected resource 에 오는 요청 및 보내는 응답을 access token 을 통해 처리
  3. client
    프로그램, 앱, resource owner 를 대신하여 resource server 에 요청을 보내는 주체.
  4. authorization server
    resource owner 를 인증하고 access token 을 발급
  • resource server 와 authorization server 는 같을 수도, 다를 수도 있다.
    하나의 authorization server 가 다수의 resource server 에게 access token 을 발급해 줄 수 있다.
 +--------+                               +---------------+
 |        |--(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.3.1

출처
https://datatracker.ietf.org/doc/html/rfc6749

profile
개발 기록

0개의 댓글