
2008년 9월
소개
개발자에게는 흥미로운 시기입니다. 웹 전반에서 여러 오픈 표준이 채택되고 있으며, 아시다시피 Google은 항상 표준을 적극적으로 지지하고 오픈소스 커뮤니티를 육성해 왔습니다.
최근 모든 Google Data API가 데스크톱 및 웹 애플리케이션이 사용자의 비공개 데이터에 액세스하는 방식을 표준화하는 것을 목표로 하는 개방형 프로토콜인 OAuth 지원을 채택했습니다. OAuth는 표준적이고 안전한 방식으로 API 인증을 실행하는 방법을 제공합니다. 프로그래머는 가능한 경우 코드를 재사용하도록 교육받습니다. OAuth를 사용하면 개발자가 작성하는 중복 코드의 양을 줄이고 다양한 제공업체의 여러 서비스와 호환되는 도구를 더 쉽게 만들 수 있습니다.
잠재고객
이 도움말에서는 사용자가 하나 이상의 Google Data API에 익숙하지만 OAuth의 개념에는 익숙하지 않다고 가정합니다. 이제 막 시작하거나 OAuth에 대해 궁금한 점이 있다면 여기에서 확인하세요. 이 도움말에서는 개념의 기본적인 내용을 설명합니다. Google의 OAuth 구현에 관한 세부정보도 설명합니다.
이 문서는 AuthSub 사용에 익숙한 개발자, 특히 보안 강화 모드로 등록된 개발자를 대상으로 합니다. 진행하면서 두 프로토콜의 유사점과 차이점을 강조해 보겠습니다. AuthSub를 사용하는 애플리케이션이 있는 경우 이 정보를 사용하여 더 개방적이고 최신 프로토콜인 OAuth로 이전할 수 있습니다.
약간의 용어
OAuth를 이해하려면 용어를 이해해야 합니다. OAuth 사양과 Google의 웹 애플리케이션용 OAuth 인증 문서에서는 특정 정의를 많이 사용하므로 Google의 OAuth 구현 컨텍스트에서 각 정의가 무엇을 의미하는지 명확히 하겠습니다.
- 'OAuth dance'
전체 OAuth 인증/승인 프로세스를 설명하는 비공식 용어입니다.
- (OAuth) 요청 토큰
Google에 애플리케이션이 Google 데이터 API 중 하나에 대한 액세스를 요청하고 있음을 알리는 초기 토큰입니다. OAuth 핸드셰이크의 두 번째 단계는 사용자가 데이터에 대한 액세스 권한을 수동으로 부여하는 것입니다. 이 단계가 성공하면 요청 토큰이 승인됩니다.
- (OAuth) 액세스 토큰
댄스의 마지막 단계는 승인된 요청 토큰을 액세스 토큰으로 교환하는 것입니다. 애플리케이션에 이 토큰이 있으면 토큰이 취소되지 않는 한 사용자가 OAuth 절차를 다시 거칠 필요가 없습니다.
AuthSub와의 유사성:
OAuth 액세스 토큰은 보안 AuthSub 세션 토큰과 동일합니다. - (OAuth) 엔드포인트
애플리케이션을 인증하고 액세스 토큰을 획득하는 데 필요한 URI입니다. OAuth 프로세스의 각 단계마다 하나씩 총 세 개가 있습니다. Google의 OAuth 엔드포인트는 다음과 같습니다.
요청 토큰을 가져옵니다. https://www.google.com/accounts/OAuthGetRequestToken
요청 토큰을 승인합니다. https://www.google.com/accounts/OAuthAuthorizeToken
액세스 토큰으로 업그레이드합니다. https://www.google.com/accounts/OAuthGetAccessToken
AuthSub와의 유사성:
승인된 요청 토큰을 액세스 토큰으로 교환하는 것은 각각https://www.google.com/accounts/AuthSubRequestToken
및https://www.google.com/accounts/AuthSubSessionToken
에서 일회용 AuthSub 토큰을 장기 세션 토큰으로 업그레이드하는 것과 유사합니다. 차이점은 AuthSub에는 초기 요청 토큰의 개념이 없다는 것입니다. 대신 사용자가AuthSubRequestToken
승인 페이지에서 토큰 프로세스를 시작합니다. - (OAuth) 서비스 제공업체
Google Data API의 경우 이 제공자는 Google입니다. 일반적으로 서비스 제공업체는 OAuth 엔드포인트를 제공하는 웹사이트 또는 웹 서비스를 설명하는 데 사용됩니다. OAuth 서비스 제공업체의 또 다른 예는 MySpace입니다.
- (OAuth) 소비자
사용자의 데이터에 액세스할 권한을 요청하는 프로그램 (즉, 애플리케이션)입니다. OAuth 프로토콜은 다양한 유형의 클라이언트 (웹, 설치, 데스크톱, 모바일)를 허용한다는 점에서 유연합니다.
참고: OAuth 프로토콜은 데스크톱/설치된 애플리케이션 사용 사례를 지원하지만 Google은 웹 애플리케이션용 OAuth만 지원합니다.
시작하기
등록
Google Data API에서 OAuth를 사용하려면 약간의 설정이 필요합니다. 모든 OAuth 요청은 디지털 서명되어야 하므로 먼저 도메인을 등록하고 공개 인증서를 Google에 업로드해야 합니다. 자세한 내용은 웹 기반 애플리케이션 등록 및 등록 모드에서 사용할 키 및 인증서 생성을 참고하세요.
서명 요청
도메인이 등록되면 요청에 서명할 수 있습니다. OAuth에서 가장 어려운 개념 중 하나는 oauth_signature
를 올바르게 구성하는 방법과 서명 기준 문자열의 개념입니다. 기본 문자열은 비공개 키 (RSA_SHA1
사용)로 서명하는 데이터입니다. 결과는 oauth_signature
에 설정한 값입니다.
요청 예시
GET
http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime
에 있는 사용자 Google Calendar 목록
기본 문자열 형식 | base_string = http-method&base-http-request-url&normalized-string-of-oauth_parameters |
---|---|
기본 문자열 예 | GET&http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D4572616e48616d6d%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D137131200%26oauth_token%3D1%252Fab3cd9j4ks73hf7g%26oauth_version%3D1.0%26orderby%3Dstarttime |
HTTP 요청 예 |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: OAuth oauth_token="1%2Fab3cd9j4ks73hf7g", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9AvZbTSMK%2FPY%3D...", oauth_consumer_key="example.com", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d", oauth_version="1.0" |
참고: 이는 표현일 뿐입니다. oauth_signature
가 훨씬 길어집니다.
기본 문자열에 대한 참고사항:
orderby=starttime
쿼리 매개변수는 사전식 바이트 값 순서로 나머지oauth_*
매개변수와 함께 정렬됩니다.- 이 문자열에는 '?' 문자도 포함되지 않습니다.
base-http-request-url
부분에는 URL 인코딩된 기본 URL(http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull
)만 포함됩니다.oauth_token
은 이중 URL로 인코딩됩니다.
Authorization
헤더 관련 참고사항:
Authorization
헤더에서oauth_*
매개변수의 순서는 중요하지 않습니다.- 헤더에는 기본 문자열에 포함된
orderby=starttime
가 포함되지 않습니다. 이 쿼리 매개변수는 요청 URL의 일부로 유지됩니다.
OAuth를 사용하여 요청에 서명하는 방법에 관한 자세한 내용은 OAuth 요청 서명을 참고하세요.
AuthSub와의 차이점:
비교를 위해 보안 AuthSub을 사용하는 동일한 예는 다음과 같습니다.
기본 문자열 형식 | base_string = http-method http-request-URL timestamp nonce |
---|---|
기본 문자열 예 |
GET http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull%3Forderby%3Dstarttime 137131200 4572616e48616d6d |
HTTP 요청 예 |
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1 Host: http://www.google.com Content-Type: application/atom+xml Authorization: AuthSub token="GD32CMCL25aZ-v____8B" data="GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime 137131200 4572616e48616d6d" sig="MCwCFrV93K4agg==..." sigalg="rsa-sha1" |
AuthSub를 사용하여 요청에 서명하는 방법에 대한 자세한 내용은 AuthSub 요청 서명을 참고하세요.
OAuth Playground 도구
목적
일부 사용자는 OAuth의 학습 곡선이 높다고 제안했습니다. Google의 다른 인증 API와 비교하면 동의합니다. 앱을 확장하여 다른 (Google 이외) 서비스를 사용하는 경우 OAuth의 장점이 명확해집니다. 다양한 서비스 제공업체와 해당 API에서 작동하는 단일 인증 코드를 작성하는 것은 매우 좋은 생각입니다. 지금 프로토콜을 학습해 두면 나중에 도움이 될 것입니다.
OAuth Playground는 개발자가 OAuth 문제를 해결할 수 있도록 제가 만든 도구입니다. 플레이그라운드를 사용하여 문제를 디버그하거나, 자체 구현을 확인하거나, Google Data API를 실험할 수 있습니다.
어떤 기능인가요?
- 요청 토큰을 가져오고, 토큰을 승인하고, 액세스 토큰으로 업그레이드하는 OAuth 인증 흐름을 보여줍니다.
- 각 요청에 대해 올바른 서명 기본 문자열을 표시합니다.
- 각 요청에 대해 올바른
Authorization
헤더를 표시합니다. - 인증된 Google 데이터 피드와 상호작용하기 위해
oauth_token
를 사용하는 방법을 보여줍니다.GET
/POST
/PUT
/DELETE
데이터를 확인할 수 있습니다. - 브라우저에서 인증된 피드를 바로 확인하세요.
- 자체
oauth_consumer_key
(등록된 도메인) 및 비공개 키를 테스트할 수 있습니다. oauth_token
에서 사용할 수 있는 Google 데이터 피드 서비스를 확인하세요.
데모 실행
1단계: 범위 선택먼저 하나 이상의 범위를 선택하여 사용할 API를 결정합니다. 이 데모에서는 블로거와 Google 주소록에서 작동하는 토큰을 요청합니다. AuthSub와의 유사성: |
![]() |
2단계: OAuth 매개변수 및 설정 수정지금은 'OAuth 매개변수 수정' 상자의 설정을 수정하지 마세요. 나중에 참고: 여기에서 수정할 수 있는 필드는
AuthSub와의 차이점: |
![]() |
3~5단계: 액세스 토큰 획득OAuth 액세스 토큰을 가져오는 데는 세 단계가 있습니다. 첫 번째 단계는 요청 토큰을 가져오는 것입니다. 이렇게 하면 Google에서 애플리케이션이 OAuth 핸드셰이크를 시작하고 있음을 알 수 있습니다. 먼저 '토큰 가져오기' 상자에서 '토큰 요청' 버튼을 클릭합니다. 특정 필드가 데이터로 채워집니다.
|
![]() ![]() |
그런 다음 '토큰 가져오기' 상자에서 '승인' 버튼을 클릭합니다. 이 승인 페이지에서 '액세스 권한 부여' 버튼을 클릭하여 요청 토큰을 승인하고 OAuth Playground로 다시 리디렉션됩니다. AuthSub와의 유사성: AuthSub와의 차이점: 도움말: 웹 애플리케이션을 작성하는 경우 더 나은 사용자 환경을 제공하는 |
![]() |
마지막으로 '토큰 가져오기' 상자에서 '액세스 토큰' 버튼을 클릭합니다. 이 작업은 승인된 요청 토큰 (빨간색 '액세스 토큰' 라벨로 표시됨)을 업그레이드합니다. 새 토큰을 가져오려면 '다시 시작'을 클릭하여 OAuth 흐름을 다시 시작하세요. 이제 흥미로운 작업을 할 수 있습니다. |
![]() |
액세스 토큰 사용
이제 피드를 쿼리하고 데이터를 삽입, 업데이트 또는 삭제할 수 있습니다. 실제 데이터를 사용하므로 마지막 세 가지 HTTP 메서드를 실행할 때는 주의하세요.
도움말: 액세스 토큰에 사용할 수 있는 피드를 확인하려면 '사용 가능한 피드' 버튼을 클릭하세요.
다음은 쿼리의 예입니다. GET http://www.blogger.com/feeds/1982051675575479214/posts/default?max-results=3

이 예시에서는 특정 블로그의 게시물을 최대 3개까지 반환합니다. 구문 강조 표시 영역 아래에 있는 '브라우저에서 보기' 링크를 클릭하여 반환된 피드/항목을 브라우저에서 직접 볼 수도 있습니다.
예: 게시물을 업데이트하는 방법
- 업데이트할 게시물에서 rel="edit"이 있는
<link>
요소를 찾습니다. 표시됩니다(예:<link rel="edit" href="http://www.blogger.com/feeds/1982051675575479214/posts/default/8138973184593279875"/>
'Google 데이터 피드 입력' 입력란에 href URL을 붙여넣습니다.
- 구문 강조 표시된 패널 상단에서 '일반 보기'를 클릭하여 기존 항목의 XML을 복사합니다. 헤더가 아닌 응답 본문만 복사합니다.
- HTTP 메서드 드롭다운을
PUT
로 변경합니다. - 드롭다운 아래의 '게시물 데이터 입력'을 클릭하고 팝업에
<entry>
XML을 붙여넣습니다. - '실행' 버튼을 클릭합니다.
서버는 200 OK
로 응답합니다.
도움말: edit
링크를 수동으로 복사하는 대신 '구문 강조 표시' 체크박스를 선택 해제하세요. 쿼리 후 XML 응답 본문 내의 링크를 클릭할 수 있습니다.
결론
AtomPub/Atom 게시 프로토콜 (Google Data API의 기본 프로토콜) 및 OAuth와 같은 기술은 웹을 발전시키는 데 도움이 됩니다. 점점 더 많은 사이트가 이러한 표준을 채택함에 따라 개발자가 승리하게 됩니다. 킬러 앱을 만드는 것이 갑자기 덜 부담스러워집니다.
OAuth Playground 또는 Google API와 함께 OAuth 사용에 관해 궁금한 점이나 의견이 있으면 G Suite API 및 Marketplace API 지원 포럼을 방문하세요.