우리는 다양한 사이트들에 접속하면서 그에 따른 로그인 요청들을 받는다.
로그인 페이지가 나오면 가장 먼저 찾는 것은 아마도 네이버, 카카오, 구글 등과
연동한 간편 로그인일 것이다.
간편 로그인을 통해서 몇번의 클릭만으로 사이트에 로그인하고 다양한 권한들을
사용할 수 있게 된다. 이러한 기능들을 Oauth 라고 한다.
예전 client-server 인증 모델들의 경우,
resource server 의 정보를 가져오기 위해서 resource owner 의 인증 정보를 그대로 가져가서 사용했다.
OAuth 가 등장하기 이전의 이러한 인증 모델들에는 다양한 문제점들이 있었다.
이를 개선하기 위해서 나온것이 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 이다.
+--------+ +---------------+
| |--(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