1. OAuth 인증이란?
OAuth 인증은 사용자가 Service Provider 비밀번호(credential)를 공유함 없이 API를 통하여 Service Provider 의 보호된 자원에 접근을
허가하는 것이다.
2. 용어정리
- 서비스 프로바이더(Service Provider) : OAuth를 통해 접근을 허용하는 웹어플리케이션, 즉 API를 제공하는 서비스를 말함
예> facebook, twitter, daum, naver 등등
- 사용자(users) : 서비스 프로바이더에 계정을 가지고 있는 개인
- 컨슈머(Consumer) : 사용자를 대신하여 서비스 프로바이더에 접근하기 위하여 OAuth를 사용하는 웹사이트 또는 어플리케이션
- 보호된 자원(Protected Resources) : 컨슈머가 인증을 통해 접근할 수 있는 서비스 프로바이더에 존재하는 사용자의 데이터
- 컨슈머 개발자(Consumer Developer) : 컨슈머를 개발하는 개인 혹은 조직
- 컨슈머 키(Consumer Key) : 서비스 프로바이더에게 컨슈머 자신임을 인증하기 위한 키
- 컨슈머 시크릿(Consumer Secret) : 컨슈머의 컨슈머 키 소유권한이 있는지 인증하기 위한 키
- 리퀘스트 토큰(Request Token) : 컨슈머가 사용자에게 접근권한을 획득하기 위해서 사용하는 값, 차후 액세스 토큰으로 교환
- 액세스 토큰(Access Token) : 컨슈머가 사용자의 서비스 프로바이더의 비밀번호(credential)을 사용하지 않고 사용자를 대신해서
보호된 자원(Protected Resources)에 접근하기 위해서 사용하는 값
- 리퀘스트 토큰 시크릿(Request Token Secret) : 리퀘스트토큰이 사용자의 것임을 인증하기 위한 값
- 액세스 토큰 시크릿(Access Token Secret) : 액세스토큰이 사용자의 것임을 인증하기 위한 값
- OAuth 프로토콜 파라미터(OAuth Protocol Parameter) : 이름이 "oauth_"로 시작하는 파라미터
3. 요청 URL(Request URLs)
1) OAuth는 다음 세개의 URL들을 정의한다.
- Request Token URL : 인증되지 않은 요청 토큰(Request Token)을 얻기 위한 URL
- User Authorization URL : 컨슈머의 접근을 허가하기 위한 사용자 인증을 얻기 위한 URL
- Access Token URL : 사용자 인증된 요청 토큰(Request Token)을 접근 토큰(Access Token)으로 교환해 줄 것을 요청하는 URL
4. 서비스 프로바이더(Service Provider)
1) 서비스 프로바이더는 다음과 같은 것을 공지해야 한다.
- Oauth URL ( Request Token URL, User Authorization URL, Access Token URL), HTTP methods
- 서비스 프로바이더가 제공하는 서명 방법(Signatuer Method)
- 서비스 프로바이더가 토큰을 얻기 위해 필요한 추가적인 파라미터들. 이 파라미터들은 'oauth_' 로 시작해서는 안된다.
5. 컨슈머(Consumer)
컨슈머 개발자는 컨슈머 키와 비밀번호를 서비스 프로바이더에게 제공해야 한다.
6. 파라미터
OAuth 프로토콜 파라미터 이름과 값은 대소문자를 구분한다. 모든 OAuth 프로토콜 파라미터들은 특별한 언급이 없는한 필수이며, 한 요청에 한 번 이상 있어서는 안된다.
7. 파라미터 인코딩
모든 파라미터 이름과 값들은 [RFC3986] 의 percent-encoding(%xx) 방법에 의해서 이스케이프(escaped)된다. Unreserved 문자 집합 밖의 문자 ([RFC3986]section 2.3)들은 인코딩 되어야만 한다. Unreserved 문자집합 안의 문자들은 인코딩되어서는 안된다. 16진법의 문자들은 대문자여야 한다. 텍스트(text) 이름과 값들은 percent-encoding이전에 UTF-8로 인코딩([RFC3629]) 되어야 한다.
더 자세한 내용은 http://oauth.net/core/1.0/, https://apis.daum.net/oauth/main/welcome 를 참고 하기 바란다.