앱을 통해 사용자 목록에 액세스하려고합니다. 나는 두 발의 권한이 작동하도록 할 수 없습니다. 설치 후 사용자의 동의없이 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 클라이언트 (oauth2client
및 apiclient
)를 사용할 수는 있지만, 제 3의 다리가 없으면 비즈니스 요구 사항을 충족하므로 양방향 인증을 사용할 수있는 경우에만 허용됩니다.
나는 다음과 같은 이유로 서비스 계정을 사용할 수 없다는 인상을 받았다. 1. http://goo.gl/NDZLj2 - 특정 API 만 지원됩니다 (1 살 이상) 2. 귀하의 링크 http://goo.gl/fj9KdX에는 '사용자 정보에 액세스하지 않고 애플리케이션을 대신해 행동합니다.'라고 표시됩니다. 사용자 정보에 액세스해야한다고 생각합니다. 3. 서비스 계정으로 사용자 정보에 액세스 할 수 없다는 메시지가 나타납니다. http://goo.gl/utY5us – jon
서비스 계정을 사용하여 원하는 항목 (Admin SDK, Directory API)에 액세스 할 수 있으면 나는 그것을 오히려 사용하고자하는데, 사용자 데이터에 액세스 할 것이므로 지원되지 않는다는 인상을 받고있었습니다.정확하지 않습니까? – jon
최신 libs 및 API를 사용하는 것에 대한 나의 유일한 혐오감은 OAuth2 플로우의 세 번째 다리 (추가 사용자 동의)를 방지하는 비즈니스 요구 사항이 있다는 것입니다. – jon