1. OAuth 란?

 OAuth 는 client 가 third party 어플리케이션에 접속할 때 페이스북, 구글, 트위터 등의 계정을 사용하여 접속 권한을 인증하는 오픈 스탠다드 프로토콜이다.

 포털, 쇼핑몰 등에 접속할때 우리가 흔히 Google+, twiter 계정을 이용하여 별도의 회원가입 절차 없이 사용할때 이용되는 프로토콜이 OAuth 이다.

 

2. OAuth 의 등장배경

 OAuth 방식이 등장하기 전에는 third party 어플리케이션에서 구글 등의 id / password 를 이용해 직접 로그인하여 사용했기 때문에 보안에 굉장히 취약했다.

 구글의 입장에서는 개인정보가 신원이 확실치 않은 third party 에 제공하는 것이 매우 위험한 일이었고, third party 입장에서는 소중한 정보를 완벽하게 저장해야했기에 부담이 있었다.

 2006년 트위터 개발자와 Gnolia 의 개발자가 보다 안전한 인증방식을 논의하면서 OAuth 가 등장하였고 2010년 OAuth 1.0 이 발표되었다.

 현재는 Oauth1.0 , Oauth 2.0 버전이 사용중이다.

 

3. OAuth 의 인증방법

1. 접속하려는 Client 는 Resource Provider 에게 id 와 secret 값을 요청한다. 그 값을 Client 는 저장을 해두고 후에 인증 시에 사용한다.
2. Client 가 Resource Provider 에게 접속을 위한 Request Token 을 user 데이터와 함께 요청하면 Resource Provider는 Request Token 을 발급해준다.
3. Client 가 user 에게 인증을 요청한 본인이 맞는지 인증페이지를 통해 확인을 한다.
4. user 가 해당페이지를 로그인을 하여 본인임을 증명하고 Resource Provider는 Client 가 로그인을 할 수있도록 권한을 수락한다.
5. Client 는 user 가 권한을 수락하여 얻은 code 와 처음에 받은 id, secret 값을 Resource Provider 에게 전달한다.
6. 전달된 정보들이 유효하면 Resource Provider 는 Client에게 Access Token을 발급해준다.
7. Client는 Access Token을 이용하여 Resource Provider 정보로 로그인을 하게된다.
 

4. OAuth1.0? OAuth2.0?

 OAuth1.0 과 OAuth2.0 은 거의 다른 방식으로 사용된다.

 OAuth1.0 보다 인증절차를 간소화했고, 더 다양한 방식을 도입하였으나 1.0과 2.0 방식이 호환되지는 않는다.

 2.0에서 애플리케이션의 인증방식이 강화되어 조금 더 안전해 졌으며 기존의 디지털 서명방식이 아닌 https 을 이용한 방식으로 암호화 하여 개발자에게 복잡한 로직이 요구되지않는다.

 

5. OAuth2.0 의 인증방식

 1. Authorization Code : 인증 코드를 이용하여 access token 을 발급

 2. Implicit : 인증코드 없이 즉시 access token 발급

 3. Password : Client 가 계정을 받아 id/password 를 이용해 access token 을 발급

 4. Client Credentials : client 가 user 외부에서access token 을 발급. 보통은 clinet 본인의 resource 접근을 위해 사용

 5. Device Code : 브라우저가 없거나 입력장치가 없는경우 이전 장치에서 받은 code를 이용하여 access token 발급

 6. Refresh Token : access token 이 만료되었을 시 새로 발급받을 수 있으며 기존 토큰은 만료됨