OAUTH
순서 OAuth 개요 OAuth 1.0 규격 OAuth 2.0 규격
OAUTH 개요
OAuth is
OAuth is Open Authorization
OAuth is 개인데이터를보유하고있는 A 웹사이트에서 B 웹사이트가이용할수있도록허용하는규약 개인데이터 A 웹사이트 B 웹사이트
OAuth is 인증에는관여하지않고, 사용권한을확인하기위한용도로만사용
OAuth is 아이디, 비밀번호없이사용자를대싞해서비스와상호작용
OAUTH 1.0 PROTOCOL
OAuth 1.0 의여러이름 1.0 1.0a rfc5849 발표 2007 년 12 월 2009 년 6 월 2010 년 4 월 정식명칭 OAuth Core 1.0 OAuch Core 1.0 Revision A The OAuth 1.0 Protocol URL http://oauth.net/core/1.0/ http://oauth.net/core/1.0a/ http://tools.ietf.org/html/rf c5849 비고폐기됨폐기됨공식표준명세서
OAuth 1.0 중요용어 서비스프로바이더 서비스프로바이더 API 를제공하는서비스예 ) Twitter, Facebook 컨수머 컨수머 (Consumer) OAuth 사용자 API 를이용해개발된 Application 사용자 컨수머또는서비스프로바이더서비스를사용하는이들 컨수머개발자 컨수머개발자 컨수머를개발하는개인혹은단체
OAuth 1.0 관련키 컨수머자격증명용키 Consumer Key 서비스프로바이더가컨수머를식별할수있는고유키 ( 일종의 id 와같은것 ) 컨수머개발자가서비스프로바이더에 application 을등록하여발급받음 Consumer Secret Consumer Key 와함께발급받음 컨수머가보낸 Consumer Key 의변경여부를서비스프로바이더가확인할수있는해킹방지용키 임시키 Request Token 컨수머가사용자에게접근권한을획득하는과정에서서비스프로바이더로부터부여받아사용하는값 추후액세스토큰으로교환 Request Token Secret 리퀘스트토큰이사용자의것임을인증하기위한값
OAuth 1.0 관련키 사용자인증키 Access Token 컨수머가사용자의서비스프로바이더를통하지않고직접보호된자원에접근할수있는권한을받기위한값 Access Token Secret 액세스토큰이사용자의것임을인증하기위한값
용어정의 (1) 용어 서비스프로바이더 (Service Provider) 사용자 (users) 컨수머 (Consumer) 보호된자원 (Protected Resources) 컨수머개발자 (Consumer Developer) 컨수머키 (Consumer Key) 컨수머시크릿 (Consumer Secret) 설명 OAuth API 를제공하는서비스 서비스프로바이더혹은 ( 그리고 ) 컨수머를사용하는이를뜻함. OAuth 를사용하여개발된애플리케이션서비스 서비스프로바이더에존재하는사용자의데이터 컨수머를개발하는개인혹은단체 서비스프로바이더에게컨수머자싞임을인증하기위한키 컨수머의컨수머키소유권한이있는지인증하기위한키
용어정의 (2) 용어 토큰 (Tokens) 설명 컨수머에서서비스프로바이더에있는사용자의보호된자원에접근하기위해사용되는사용자의인증정보 리퀘스트토큰 (Request Token) 리퀘스트토큰시크릿 (Request Token Secret) 액세스토큰 (Access Token) 액세스토큰시크릿 (Access Token Secret) 컨수머가사용자에게접근권한을획득하는과정에서사용하는값이며, 이것은차후액세스토큰으로교환 리퀘스트토큰이사용자의것임을인증하기위한값 컨수머가사용자의서비스프로바이더를통해서가아닌컨수머를통해서보호된자원에접근할수있는권한을받기위한값 액세스토큰이사용자의것임을인증하기위한값
OAuth 1.0 Flow
OAuth 1.0 Flow Consumer Request token 요청 1. 리퀘스트키요청 2. 사용자인증 사용자를 Service Provider 로보내인증 3. 액세스키교환단계 Access Token 으로교환요청 Access Token 을이용해보호된자원접근 A B C D E F Service Provider Request token 발급 사용자인증 컨수머싞원확인 Request Token 을 Access Token 으로교환
Request Token 요청및응답 Request Token 요청 (consumer) POST /initiate HTTP/1.1 Host: photos.example.net Authorization: OAuth realm="photos", oauth_consumer_key="dpf43f3p2l4k3l03", oauth_signature_method="hmac-sha1", oauth_signature="74knzjedhnmbp0emj9zht%2fxkycu%3d oauth_timestamp="137131200", oauth_nonce="wijqos", oauth_callback="http%3a%2f%2fprinter.example.com%2fready", Request Token 응답 (service provider) HTTP/1.1 200 OK Content-Type: application/x-www-form-urlencoded oauth_token=j49ddk933skd9dks&oauth_token_secret=ll399dj47dskfjdk
Service Provider 가해야할일 컨수머등록및키발급 Consumer Key Consumer Secret 서비스가제공하는 OAuth URL(endpoint) 선언 리퀘스트토큰 URL ex) https://apis.daum.net/oauth/requesttoken 사용자인증 URL ex) https://apis.daum.net/oauth/authorize Access 토큰 URL ex) https://apis.daum.net/oauth/accesstoken Protected Resource URL ex) 다음카페포스트보기 : http://apis.daum.net/blog/post/list.do
Service Provider 가해야할일 Request token 요청유효성검사 signature 확인 (oauth_signature + oauth_signature_method) Ex) signature_method 가 HMAC-SHA1 일경우, signature = base64_encode(hmac-sha1 (key, text)) - key = consumer_secret+token_secret - text = 요청파라메터를정해짂규칙에의해연결한문자열 자세한내용은 Protocol 문서참고한글 - http://rhio.springnote.com/pages/5666089#toc_8 원문 - http://tools.ietf.org/html/rfc5849#section-3 Nonce 와 timestamp 확인 - 같은요청을반복해요청하는공격에대비하기위한값. - Nonce 는컨수머에서생성하는임의의문자열이고, 같은 timestamp 내에서는유일한값이어야함.
Service Provider 가해야할일 Request token 발급및유지관리 Request token key Request token secret 사용자인증 Access Token 발급및유지관리 Access token key Access token secret Access Token 발급시컨수머로부터받은 Request Token 값은 Access Token 으로변환된적이없어야함. ( 서버에서 Request Token 이 Access Token 으로변환된것적이있는지확인하여야함 )
OAuth 1.0 관련정보 OAuth 1.0 표준명세서 - http://tools.ietf.org/html/rfc5849 OAuth 1.0 표준명세서 ( 한글 ) - http://rhio.springnote.com/pages/5666089 Twitter OAuth 소개 - http://dev.twitter.com/pages/auth Daum OAuth 소개 - https://apis.daum.net/oauth/main/welcome - tutorial 동영상 : http://daumdna.tistory.com/664 스프링노트개발자노트 - OAuth 인증방식이해하기 http://dev.springnote.com/pages/1083036
OAUTH 2.0 PROTOCOL
OAuth 2.0 역할 Authorization Server Authorization Server OAuth 2.0 기능을담당. = OAuth 1.0 Service Provider Client Client OAuth 2.0 Resource Server OAuth 2.0 을이용해개발한 App = OAuth 1.0 Consumer Resource Owner = OAuth 1.0 User Resource Owner Resource Server = OAuth 1.0 Service Provider
OAuth1.0 한계 CS App, Widget App 등다양한 Case 에적용하기어려움
OAuth1.0 WRAP(Web Resource Authorization Profiles) Autonomous Client Profile Client Account&Password Profile Assertion Profile ------ SAML User Delegation Profile Username&Password Profile Web App Profile Rich App Profile( Native App )
OAuth2.0 FLow
OAuth2.0 Flow Authorization code
OAuth2.0 Flow Refresh Token
OAuth2.0 Client authentication ID/Password 방식 HTTP Basic Auth Schema(RFC2617)
OAuth2.0 Authorization Request
OAuth2.0 Authorization Response
OAuth2.0 access token Request
OAuth2.0 access token Res
OAuth2.0 Implicit Grant
OAuth2.0 Implicit Grant - Authorization Request token
OAuth2.0 Implicit Grant - Authorization res