2

앱을 통해 사용자 목록에 액세스하려고합니다. 나는 두 발의 권한이 작동하도록 할 수 없습니다. 설치 후 사용자의 동의없이 Google의 API에 액세스 할 수 있기를 원합니다. gdata lib는 올해 초 사용이 중단되었지만 비즈니스 요구 사항에 따라 도메인 관리자가 앱을 설치 한 후에 추가 사용자 동의없이 API에 액세스해야합니다.파이썬 gdata 라이브러리와 함께 two-legged oauth를 어떻게 사용합니까?

  • 나는 마켓 플레이스에서 응용 프로그램을 만들었습니다 여기

    내가 지금까지 한 일이다. 내가 테스트 도메인 내 응용 프로그램을 설치하고 위의 범위에 대한 권한을 부여한

    https://apps-apis.google.com/a/feeds/user/

  • : 앱 매니페스트는이 범위를 선언합니다.

  • 여기 샘플을 살펴 보았다 : https://code.google.com/p/gdata-python-client/source/browse/samples/oauth/

    • 되지 않는 Service 방법 : 2_legged_oauth.py
    • 업데이트 Client 방법 : TwoLeggedOAuthExample.py

내가 파이썬을 사용하고 2.7.5 및 gdata 2.0.18.

import gdata.gauth 
import gdata.apps.client 

CONSUMER_KEY = "[snip].apps.googleusercontent.com" 
CONSUMER_SECRET = "[snip]" 
requestor_id = '[email protected]' 

client = gdata.apps.client.AppsClient(domain='mydomain.com', source='myapp-v1') 
client.auth_token = gdata.gauth.TwoLeggedOAuthHmacToken(
    CONSUMER_KEY, CONSUMER_SECRET, requestor_id) 
client.ssl = True 

# Failure occurs here. 
feed = client.RetrieveAllUsers() 

응답 : 여기서

<HTML> 
<HEAD> 
<TITLE>Unknown authorization header</TITLE> 
</HEAD> 
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 
<H1>Unknown authorization header</H1> 
<H2>Error 401</H2> 
</BODY> 
</HTML> 

는 헤더에 대한 세부 사항이 전송되고이 :

여기
GET /a/feeds/mydomain.com/user/2.0?xoauth_requestor_id=myuser%40mydomain.com HTTP/1.1 
Host: apps-apis.google.com 
Accept-Encoding: identity 
GData-Version: 2.0 
Authorization: OAuth oauth_nonce="035378574830673", oauth_timestamp="1383593346", oauth_consumer_key="[snip].apps.googleusercontent.com", oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_signature="[snip]" 
User-Agent: test-test-v1 gdata-py/2.0.18 

는 여기서 상술 한 실시 예에서 채택 된 내 코드이며 응답에 대한 디버깅 정보 (atom.http_core.ProxiedHttpClient를 디버그 모드로 전환 한 것으로서) :

reply: 'HTTP/1.1 401 Unknown authorization header\r\n' 
header: WWW-Authenticate: GoogleLogin realm="http://www.google.com/accounts/ClientLogin", service="apps" 
header: Content-Type: text/html; charset=UTF-8 
header: Date: Mon, 04 Nov 2013 19:33:35 GMT 
header: Expires: Mon, 04 Nov 2013 19:33:35 GMT 
header: Cache-Control: private, max-age=0 
header: X-Content-Type-Options: nosniff 
header: X-Frame-Options: SAMEORIGIN 
header: X-XSS-Protection: 1; mode=block 
header: Server: GSE 
header: Alternate-Protocol: 443:quic 
header: Transfer-Encoding: chunked 

도메인의 사용자에게 액세스하는 데 두 다리가있는 oauth를 사용하려면 어떻게해야합니까? 새로운 Google API 클라이언트 (oauth2clientapiclient)를 사용할 수는 있지만, 제 3의 다리가 없으면 비즈니스 요구 사항을 충족하므로 양방향 인증을 사용할 수있는 경우에만 허용됩니다.

답변

1

OAuth2 서비스 계정과 관련하여 readthedocs으로 문의하는 것이 좋습니다.

2-legged-OAuth는 더 이상 사용되지 않으며 gdata API는 거의 사용되지 않으며 서비스는 훨씬 쉽고 사용하기 쉽습니다.

+0

나는 다음과 같은 이유로 서비스 계정을 사용할 수 없다는 인상을 받았다. 1. http://goo.gl/NDZLj2 - 특정 API 만 지원됩니다 (1 살 이상) 2. 귀하의 링크 http://goo.gl/fj9KdX에는 '사용자 정보에 액세스하지 않고 애플리케이션을 대신해 행동합니다.'라고 표시됩니다. 사용자 정보에 액세스해야한다고 생각합니다. 3. 서비스 계정으로 사용자 정보에 액세스 할 수 없다는 메시지가 나타납니다. http://goo.gl/utY5us – jon

+0

서비스 계정을 사용하여 원하는 항목 (Admin SDK, Directory API)에 액세스 할 수 있으면 나는 그것을 오히려 사용하고자하는데, 사용자 데이터에 액세스 할 것이므로 지원되지 않는다는 인상을 받고있었습니다.정확하지 않습니까? – jon

+0

최신 libs 및 API를 사용하는 것에 대한 나의 유일한 혐오감은 OAuth2 플로우의 세 번째 다리 (추가 사용자 동의)를 방지하는 비즈니스 요구 사항이 있다는 것입니다. – jon