1

IT 관리자가 Apps 마켓 플레이스에서 App을 인증하면 사용자의 이메일을 읽을 Gmail 서비스를 구축하려고합니다. 문서에서, 오른쪽 적합 할 것입니다 서비스 계정 듯하는 내가 시도 모두 : 다음 그러나 Unable to access BigQuery from local App Engine development serverGmail 서비스 용 App Engine에서 AppAssertionCredentials가있는 서비스 계정을 인증 할 수 없습니다.

에 따라 dev_appserver.py 시작

scope = "https://www.googleapis.com/auth/gmail.readonly" 
    project_number = "c****io" 
    authorization_token, _ = app_identity.get_access_token(scope) 
    logging.info("Using token %s to represent identity %s", 
       authorization_token, app_identity.get_service_account_name()) 
    #authorization_token = "OAuth code pasted from playground" 
    response = urlfetch.fetch(
     "https://www.googleapis.com/gmail/v1/users/me/messages", 
     method=urlfetch.GET, 
     headers = {"Content-Type": "application/json", 
        "Authorization": "OAuth " + authorization_token}) 

credentials = AppAssertionCredentials(scope=scope) 
    http = credentials.authorize(httplib2.Http(memcache)) 
    service = build(serviceName='gmail', version='v1', http=http) 
    listReply = gmail_service.users().messages().list(userId='me', q = '').execute() 

, HTTP 오류 코드 500 "백엔드 오류"가 표시됩니다. 같은 코드이지만 OAuth 놀이터에서 access_token을 붙여 넣으면 제대로 작동합니다 (HTTP 200). 차이가 나는 경우에 대비하여 로컬 컴퓨터에 있습니다. 내가 놓친 게 궁금한가요? IT 관리자가 내 Google Marketplace 앱을 설치 한 특정 도메인의 모든 사용자에 대한 모든 이메일을 찾으려고합니다.

도움 주셔서 감사합니다.

답변

0

이러한 유형의 가장을 수행하려면 JWT를 만들고 "sub"필드에 사서함에 액세스하려는 사용자의 전자 메일 주소를 설정해야합니다. 개발자 문서 : Using OAuth 2.0 for Server to Server Applications: Additional claims.

자격 증명이

credentials = SignedJwtAssertionCredentials(
    "<service account email>@developer.gserviceaccount.com", 
    file("secret-privatekey.pem", "rb").read(), 
    scope=["https://www.googleapis.com/auth/gmail.readonly"], 
    sub="<user to impersonate>@your-domain.com" 
) 
+0

감사처럼 보일 것이다 구축하는 파이썬 코드! 따라서 Google Apps Marketplace 앱과 관련하여 앱을 설치 한 모든 도메인에서이 기능을 사용할 수 있습니까? 또한 여러 개의 서비스 계정을 만들 수있는 것으로 나타났습니다.이 서비스는 (SERVICE_ACCOUNT_EMAIL, private_key.p12) 조합 중 하나에서 작동합니까? 많은 도메인 전체 인증 위임 문서가 "AdminConsole : 타사 OAuth 클라이언트 액세스 관리"에 대해 이야기하지만 Marketplace 앱의 경우에는 해당되지 않기 때문에 묻습니다. 그리고 "Test Install Flow"를 사용하여 내 도메인에 앱을 설치할 때 API 클라이언트 액세스는 서비스 계정 이메일이 아니라 앱 이름을 표시합니다. –