OAuth 2.0
API인증을 위한 만능 도구상자

기술전략팀 | 박민우 | @tebica
모바일 / 클라우드 / 정보인권
박민우   C / PHP / Javascript
      Python
                             2
@tebica
http://earlybird.kr
      기술전략팀
                        젤리스트
     저비용 고효율 개발자 행사   에반




                               3
지난 번에는..
“조금 더 쉬웠으면 좋겠다.”   “이미 아는 수준이었어요”
“무슨소린지 그닥 이해안됨.”
1. 오어쓰가 누구야?

2. OAuth 써봤어요!

3. OAuth 1.0은 알아요~
   OAuth 2.0을 알고싶어요!

4. 난~ 알아요!
                       7
8
이번 발표 비율




            OAuth 1.0   OAuth 2.0         Other

Easy          35%             50%         15%



       0%         25%   50%         75%       100%

                                                     9
10
2012년 10월 12일




   ed! RFC 6749
Fix    RFC 6750
책 쓸때만 하더라도...
  Draft 31 였어요...




                    12
Today’s Menu
 Why OAuth ?
 What is OAuth 1.0
 What is OAuth 2.0
 OAuth FAQs

                     13
?
Why OAuth ?
Why OAuth?




  Web 의 시대
 Mobile 의 시대
Platform 의 시대

                       15
Why OAuth?



Mobile 의 시대
 핸드폰은 쉽게 잃어 버리는데
 비밀번호를 모두 바꿔야 하나?

 너무 많은 서비스!
 비밀번호 관리는 어떡하지

                              16
Why OAuth?



Platform 의 시대
 API를 통한 서비스로
 다른 서비스와 연동도 해야지!

 페이스북/트위터의 아이디 로
 다른 서비스 가입없이 사용하고 싶어!
 (안전하게!)
                             17
Why OAuth?



이제는 -
1. 비밀번호를 신뢰못하는 앱에 저장하기 싫다.
2. 원하는 권한만 주고 싶다
3. 원할 때 권한을 회수하고 싶다.
4. 페이스북/트위터 아이디로 다른서비스에
   로그인 하고싶다.

기존의 ID / Password 인증으론
부족해 !
                                18
Why OAuth?

OAuth.. 해보셨죠?
1. 아임인에서 트위터 비밀번호 저장 없이 트윗하기
2. Facebook 로그인




                3초..
                                    19
세상은 왜!
OAuth를 좋아하는가!




            20
Why OAuth?


     REST
WE    API




                    21
What is OAuth 1.0
OAuth 1.0


                        저것
 만으로는
2006년 11월               우리
 API
 제어에
                       적합하지
 않은데..
어느날..


“우리는 인증 (Authentication)뿐만 아니라
API 사용 권한 부여(Authorization)도 할 수 있는
방법이 필요해!”

                Authentication
            =   +
                Authorization                                                                          23
OAuth 1.0



사랑의 트라이앵글          3-legged




            user                   Server
                    Client      (service provider)
                   (consumer)



                                               24
OAuth 1.0


3-legged 의 장점
1. 개발자 인증/관리




                API 호출 건수를
                   제한하겠어요!


                                  25
OAuth 1.0


3-legged 의 장점
2. 비밀번호를
전달 하지 않아도 됨


                비밀번호는
                   에게
                비밀번호는
                   에게
                             26
OAuth 1.0


      HOW?
      “인증 토큰”
       (Access Token)

API를 사용하는 서비스(consumer)에
비밀번호를 저장하지 않고
인증 토큰을 저장,인증토큰(Access Token)으로
API 사용



                                  27
OAuth 1.0



  “인증 토큰”
   (Access Token)

서비스에 패스워드 전달없이 인증
필요한 기능만 부여 할 수 있음
언제나 다시 권한 취소 가능
패스워드 변경시에도 유효
                              28
OAuth 1.0



발렛파킹
해주세요!




    1km만 주행가능
   트렁크는 열 수 없음
   터보모드 사용 불가

                         29
위시 리스트 저장
      트위터에 자동 공유
지름신




                   30
지름신

나도 트위터
 연동을
해보겠어 !
         31
지름신




      32
지름신




      33
개발   끝!
    SDK




.
.
.
                    34
OAuth 1.0


(사용자가) 처음 트위터 연동하기
             consumer


    ①
    트위터      지름신          ② 사용자를
    로그인 요청                 트위터 로그인 화면으로..

                ④ 인증토큰
                     전달



                                   service
             ③ 트위터
 user          로그인
                                   provider
트위터로 포워딩 됨

 지름신

              지름신
              by 다만들어
              damandla.kr
              wishlist app for web


                            접근할 앱 정보
    요청하는 권한
               지름신
               by 다만어
               damandla.kr
               wishlist app for web




                                       36
OAuth 1.0


트위터에 내보내기
             consumer



    ①         지름신                    인증
    위시 리스트              ② 트위터에       토큰
    저장!                  내보내기




                                 service
 user                            provider
다만들어의 지름신
wishlist app for web




                       38
OAuth 1.0


         OAuth 1.0은 불편해요..
   3-legged only                                                                     2-legged



                                    Server
    user
                   Client (service provider)
                (consumer)




Signature 생성
HMAC-SHA1
(include_entities=trueoauth_consumer_key=xvz1evFS4wEEPTGEFPHBogoauth_nonce=kYjzV
BB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cgoauth_signature_method=HMAC-
SHA1oauth_timestamp=1318622958oauth_token=370773112-
GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEboauth_version=1.0status=Hello
%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21          )                          39
What is OAuth 2.0
OAuth 2.0

OAuth versions
                      No
     1.0         보안 문제가 있는 버전.
                 절대로 사용하면 안됨

                     OK
     1.0a        안정적이고 사용해도 됨
  (RFC 5849)       자체 암호화 기능
                  (HTTPS 불필요)

     2.0            Good
   (RFC 6749      기본 스펙 표준화 완료
   RFC 6750)     추가 스펙 표준화 진행 중        41
OAuth 2.0




               OAuth 2.0
 OAuth 1.0
             Authorization
 Protocol
              Framework


호환 안됨 / 용어부터 완전 다름
                                  42
43
OAuth 2.0

용어
             1.0                  2.0
사용자           User          Resource Owner

클라이언트     Consumer                Client

API서버                       Resource Server
        Service Provider
인증서버                       Authorization Server

                                                44
OAuth 2.0

유명한 서비스 들의 OAuth 버젼
    1.0a       2.0




                                 45
OAuth 2.0

주요 서비스의 OAuth 2.0 구현 버전




바뀐점
  HTTP 헤더 :
  OAuth - Bearer
  파라메터 이름:
  oauth_token - access_token
                                      46
OAuth 2.0



OAuth 2.0의 장점

 확장성 : API서버와 인증서버의 분리
 간단해 짐 : signature - HTTPS
 다양한 시나리오 : 다양한 토큰 지원
      다양한 grant type 지원


                                  47
OAuth 2.0

확장성 (API 서버와 인증서버의 분리 )


                                 인증서버
                                 분리




    sync 이슈!   .
               .   역할 분리!       .
                                .
               .                .       48
OAuth 2.0

간단 해졌어요

   HMAC-SHA1




                           49
OAuth 2.0

Client types
(기준: client 인증서를 안전하게 보관할 수 있는가)

   Confidential
                      Public Client
     Client

 client 인증서 보관      client 인증서 없음

 안전하게 client 인증서를     resource owner가
  보관할 수 있는 기기             소유한 기기
    ex) 서버 등        ex) 핸드폰, JS기반 app 등

                                             50
OAuth 2.0


다양한 인증 방식 (Grant type)
                3-legged          2-legged

  Public                      Password Credentials
               Implicit Grant
  Client                            Grant



Confidential   Authorization   Client Credentials
  Client        Code Grant           Grant

                                                    51
OAuth 2.0



 2-legged 의 사용 예



         no-browser   서버에서 접근
스마트 TV   device


                                    52
OAuth 2.0


extension 가능!

                extension
                Grant type




                                  53
OAuth 2.0


다양한 토큰 방식
  Bearer token (표준)
  GET /wishlist/expensive
  Authorization: Bearer xx...
  GET /wishlist/expensive?access_token=xx..


  MAC token
  JSON-web token
  SAML2
                                            54
OAuth 2.0



Access token 유효기간
 모든 access token은 유효기간을 지님
 기간이 만료되면 refresh token으로 연장
 번거롭고 귀찮은 일..




                                  55
OAuth 2.0



 OAuth libraries
1.             연동하기
 각 서비스의 SDK

2.SDK가 없는 서비스 연동하기
 OAuth library http://oauth.net/code/

3.OAuth 서비스 제공하기
 OAuth library http://oauth.net/code/


                                                    56
OAuth 2.0



OAuth는 위험하다!?

  “OAuth 2.0 스펙에서
    내 이름을 빼달라”
    - Eran Hammer


                                57
OAuth 2.0



 그가 제시한 이유
1.토큰 암호화 안함

2.refresh 하는 과정에서의 token 관리 문제

3.너무 많은 권한 부여방식
  모든 방식이 OAuth 2.0이다?


                                     58
OAuth 2.0



 그에 대한 반론
1.토큰 암호화 안함
  HTTPS 는 충분히 안전
2.refresh 하는 과정에서의 token 관리 문제
  여러가지 대안 존재
3.너무 많은 권한 부여방식
  안전한 grant type사용 / extension사용 제한

                                       59
OAuth 2.0



 OAuth 2.0은 안전하다
1.표준 spec을 사용하세요

2.HTTPS는 기본입니다

3.De facto 표준 (Google  FB)



                                          60
OAuth FAQs
저는 HTTPS 를 지원할 수 없어요
               어떻게 하지요?




OAuth 1.0a 를 사용하세요!
자체 암호화 기능이 있답니다

                                 62

OAuth2 - API 인증을 위한 만능도구상자

  • 1.
    OAuth 2.0 API인증을 위한만능 도구상자 기술전략팀 | 박민우 | @tebica
  • 2.
    모바일 / 클라우드/ 정보인권 박민우 C / PHP / Javascript Python 2
  • 3.
    @tebica http://earlybird.kr 기술전략팀 젤리스트 저비용 고효율 개발자 행사 에반 3
  • 4.
    지난 번에는.. “조금 더쉬웠으면 좋겠다.” “이미 아는 수준이었어요” “무슨소린지 그닥 이해안됨.”
  • 7.
    1. 오어쓰가 누구야? 2.OAuth 써봤어요! 3. OAuth 1.0은 알아요~ OAuth 2.0을 알고싶어요! 4. 난~ 알아요! 7
  • 8.
  • 9.
    이번 발표 비율 OAuth 1.0 OAuth 2.0 Other Easy 35% 50% 15% 0% 25% 50% 75% 100% 9
  • 10.
  • 11.
    2012년 10월 12일 ed! RFC 6749 Fix RFC 6750
  • 12.
    책 쓸때만 하더라도... Draft 31 였어요... 12
  • 13.
    Today’s Menu WhyOAuth ? What is OAuth 1.0 What is OAuth 2.0 OAuth FAQs 13
  • 14.
  • 15.
    Why OAuth? Web 의 시대 Mobile 의 시대 Platform 의 시대 15
  • 16.
    Why OAuth? Mobile 의시대 핸드폰은 쉽게 잃어 버리는데 비밀번호를 모두 바꿔야 하나? 너무 많은 서비스! 비밀번호 관리는 어떡하지 16
  • 17.
    Why OAuth? Platform 의시대 API를 통한 서비스로 다른 서비스와 연동도 해야지! 페이스북/트위터의 아이디 로 다른 서비스 가입없이 사용하고 싶어! (안전하게!) 17
  • 18.
    Why OAuth? 이제는 - 1.비밀번호를 신뢰못하는 앱에 저장하기 싫다. 2. 원하는 권한만 주고 싶다 3. 원할 때 권한을 회수하고 싶다. 4. 페이스북/트위터 아이디로 다른서비스에 로그인 하고싶다. 기존의 ID / Password 인증으론 부족해 ! 18
  • 19.
    Why OAuth? OAuth.. 해보셨죠? 1.아임인에서 트위터 비밀번호 저장 없이 트윗하기 2. Facebook 로그인 3초.. 19
  • 20.
  • 21.
    Why OAuth? REST WE API 21
  • 22.
  • 23.
    OAuth 1.0 저것
  • 24.
  • 25.
  • 26.
     제어에 적합하지
  • 27.
     않은데.. 어느날.. “우리는 인증 (Authentication)뿐만아니라 API 사용 권한 부여(Authorization)도 할 수 있는 방법이 필요해!” Authentication = + Authorization 23
  • 28.
    OAuth 1.0 사랑의 트라이앵글 3-legged user Server Client (service provider) (consumer) 24
  • 29.
    OAuth 1.0 3-legged 의장점 1. 개발자 인증/관리 API 호출 건수를 제한하겠어요! 25
  • 30.
    OAuth 1.0 3-legged 의장점 2. 비밀번호를 전달 하지 않아도 됨 비밀번호는 에게 비밀번호는 에게 26
  • 31.
    OAuth 1.0 HOW? “인증 토큰” (Access Token) API를 사용하는 서비스(consumer)에 비밀번호를 저장하지 않고 인증 토큰을 저장,인증토큰(Access Token)으로 API 사용 27
  • 32.
    OAuth 1.0 “인증 토큰” (Access Token) 서비스에 패스워드 전달없이 인증 필요한 기능만 부여 할 수 있음 언제나 다시 권한 취소 가능 패스워드 변경시에도 유효 28
  • 33.
    OAuth 1.0 발렛파킹 해주세요! 1km만 주행가능 트렁크는 열 수 없음 터보모드 사용 불가 29
  • 34.
    위시 리스트 저장 트위터에 자동 공유 지름신 30
  • 35.
  • 36.
  • 37.
  • 38.
    개발 끝! SDK . . . 34
  • 39.
    OAuth 1.0 (사용자가) 처음트위터 연동하기 consumer ① 트위터 지름신 ② 사용자를 로그인 요청 트위터 로그인 화면으로.. ④ 인증토큰 전달 service ③ 트위터 user 로그인 provider
  • 40.
    트위터로 포워딩 됨 지름신 지름신 by 다만들어 damandla.kr wishlist app for web 접근할 앱 정보 요청하는 권한 지름신 by 다만어 damandla.kr wishlist app for web 36
  • 41.
    OAuth 1.0 트위터에 내보내기 consumer ① 지름신 인증 위시 리스트 ② 트위터에 토큰 저장! 내보내기 service user provider
  • 42.
  • 43.
    OAuth 1.0 OAuth 1.0은 불편해요.. 3-legged only 2-legged Server user Client (service provider) (consumer) Signature 생성 HMAC-SHA1 (include_entities=trueoauth_consumer_key=xvz1evFS4wEEPTGEFPHBogoauth_nonce=kYjzV BB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cgoauth_signature_method=HMAC- SHA1oauth_timestamp=1318622958oauth_token=370773112- GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEboauth_version=1.0status=Hello %20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21 ) 39
  • 44.
  • 45.
    OAuth 2.0 OAuth versions No 1.0 보안 문제가 있는 버전. 절대로 사용하면 안됨 OK 1.0a 안정적이고 사용해도 됨 (RFC 5849) 자체 암호화 기능 (HTTPS 불필요) 2.0 Good (RFC 6749 기본 스펙 표준화 완료 RFC 6750) 추가 스펙 표준화 진행 중 41
  • 46.
    OAuth 2.0 OAuth 2.0 OAuth 1.0 Authorization Protocol Framework 호환 안됨 / 용어부터 완전 다름 42
  • 47.
  • 48.
    OAuth 2.0 용어 1.0 2.0 사용자 User Resource Owner 클라이언트 Consumer Client API서버 Resource Server Service Provider 인증서버 Authorization Server 44
  • 49.
    OAuth 2.0 유명한 서비스들의 OAuth 버젼 1.0a 2.0 45
  • 50.
    OAuth 2.0 주요 서비스의OAuth 2.0 구현 버전 바뀐점 HTTP 헤더 : OAuth - Bearer 파라메터 이름: oauth_token - access_token 46
  • 51.
    OAuth 2.0 OAuth 2.0의장점 확장성 : API서버와 인증서버의 분리 간단해 짐 : signature - HTTPS 다양한 시나리오 : 다양한 토큰 지원 다양한 grant type 지원 47
  • 52.
    OAuth 2.0 확장성 (API서버와 인증서버의 분리 ) 인증서버 분리 sync 이슈! . . 역할 분리! . . . . 48
  • 53.
  • 54.
    OAuth 2.0 Client types (기준:client 인증서를 안전하게 보관할 수 있는가) Confidential Public Client Client client 인증서 보관 client 인증서 없음 안전하게 client 인증서를 resource owner가 보관할 수 있는 기기 소유한 기기 ex) 서버 등 ex) 핸드폰, JS기반 app 등 50
  • 55.
    OAuth 2.0 다양한 인증방식 (Grant type) 3-legged 2-legged Public Password Credentials Implicit Grant Client Grant Confidential Authorization Client Credentials Client Code Grant Grant 51
  • 56.
    OAuth 2.0 2-legged의 사용 예 no-browser 서버에서 접근 스마트 TV device 52
  • 57.
    OAuth 2.0 extension 가능! extension Grant type 53
  • 58.
    OAuth 2.0 다양한 토큰방식 Bearer token (표준) GET /wishlist/expensive Authorization: Bearer xx... GET /wishlist/expensive?access_token=xx.. MAC token JSON-web token SAML2 54
  • 59.
    OAuth 2.0 Access token유효기간 모든 access token은 유효기간을 지님 기간이 만료되면 refresh token으로 연장 번거롭고 귀찮은 일.. 55
  • 60.
    OAuth 2.0 OAuthlibraries 1. 연동하기 각 서비스의 SDK 2.SDK가 없는 서비스 연동하기 OAuth library http://oauth.net/code/ 3.OAuth 서비스 제공하기 OAuth library http://oauth.net/code/ 56
  • 61.
    OAuth 2.0 OAuth는 위험하다!? “OAuth 2.0 스펙에서 내 이름을 빼달라” - Eran Hammer 57
  • 62.
    OAuth 2.0 그가제시한 이유 1.토큰 암호화 안함 2.refresh 하는 과정에서의 token 관리 문제 3.너무 많은 권한 부여방식 모든 방식이 OAuth 2.0이다? 58
  • 63.
    OAuth 2.0 그에대한 반론 1.토큰 암호화 안함 HTTPS 는 충분히 안전 2.refresh 하는 과정에서의 token 관리 문제 여러가지 대안 존재 3.너무 많은 권한 부여방식 안전한 grant type사용 / extension사용 제한 59
  • 64.
    OAuth 2.0 OAuth2.0은 안전하다 1.표준 spec을 사용하세요 2.HTTPS는 기본입니다 3.De facto 표준 (Google FB) 60
  • 65.
  • 66.
    저는 HTTPS 를지원할 수 없어요 어떻게 하지요? OAuth 1.0a 를 사용하세요! 자체 암호화 기능이 있답니다 62

Editor's Notes

  • #2 \n
  • #3 \n
  • #4 \n
  • #5 \n
  • #6 \n
  • #7 \n
  • #8 \n
  • #9 \n
  • #10 \n
  • #11 \n
  • #12 \n
  • #13 \n
  • #14 난 알아요 부분에서 노래가 나오도록\n난 알아요! -> 문은 저쪽에 2개가 준비되어 있습니다.\n저는 중간에 나간다고 상처 받지 않아요-\n\n
  • #15 난 알아요 부분에서 노래가 나오도록\n난 알아요! -> 문은 저쪽에 2개가 준비되어 있습니다.\n저는 중간에 나간다고 상처 받지 않아요-\n\n
  • #16 난 알아요 부분에서 노래가 나오도록\n난 알아요! -> 문은 저쪽에 2개가 준비되어 있습니다.\n저는 중간에 나간다고 상처 받지 않아요-\n\n
  • #17 난 알아요 부분에서 노래가 나오도록\n난 알아요! -> 문은 저쪽에 2개가 준비되어 있습니다.\n저는 중간에 나간다고 상처 받지 않아요-\n\n
  • #18 난 알아요 부분에서 노래가 나오도록\n난 알아요! -> 문은 저쪽에 2개가 준비되어 있습니다.\n저는 중간에 나간다고 상처 받지 않아요-\n\n
  • #19 \n
  • #20 \n
  • #21 시계보다 더 나은 이미지 없을까?\n
  • #22 시계보다 더 나은 이미지 없을까?\n
  • #23 \n
  • #24 \n
  • #25 \n
  • #26 \n
  • #27 \n
  • #28 \n
  • #29 \n
  • #30 \n
  • #31 \n
  • #32 \n
  • #33 \n
  • #34 \n
  • #35 \n
  • #36 \n
  • #37 \n
  • #38 \n
  • #39 \n
  • #40 \n
  • #41 \n
  • #42 \n
  • #43 \n
  • #44 \n
  • #45 개발자에게 이메일로 공지!\n
  • #46 이제 토큰 발생 개수 제한 (3-legged 라서)\n-> 개발자 인증!\n
  • #47 \n
  • #48 \n
  • #49 \n
  • #50 \n
  • #51 \n
  • #52 \n
  • #53 \n
  • #54 \n
  • #55 \n
  • #56 \n
  • #57 \n
  • #58 \n
  • #59 개발자는 트위터 개발자 페이지에서 등록해서 컨슈머 키를 받습니다.\n\n
  • #60 key/pass 부분을 위에 크게 확대!\n
  • #61 \n
  • #62 \n
  • #63 지름신 앱 define을 웹앱으로 재설정\n\n
  • #64 \n
  • #65 \n
  • #66 \n
  • #67 \n
  • #68 \n
  • #69 umbrella term\nRFC 1.0은 당연히 OAuth 1.0a\n
  • #70 http://tools.ietf.org/wg/oauth/\n
  • #71 \n
  • #72 호환안됨\n\n\n
  • #73 옛날 라이브러리 괜찮아~!\n
  • #74 \n
  • #75 \n
  • #76 여러 rest client\n
  • #77 \n
  • #78 \n
  • #79 \n
  • #80 \n
  • #81 \n
  • #82 \n
  • #83 \n
  • #84 이 내용은 간결하게 정리\n
  • #85 \n
  • #86 \n
  • #87 \n
  • #88 \n
  • #89 \n
  • #90 \n
  • #91 인증토큰 방식은 어울리지 않음\n
  • #92 인증토큰 방식은 어울리지 않음\n
  • #93 \n
  • #94 \n
  • #95 \n
  • #96 \n
  • #97 \n