【问题标题】:AdminSettings API using service account auth/keyword failures使用服务帐户身份验证/关键字失败的 AdminSettings API
【发布时间】:2016-01-05 14:21:05
【问题描述】:

尝试通过 Python 中的服务帐户使用 AdminSettings API 检索域用户数“GetCurrentNumberOfUsers()”。启用了广泛的授权和范围,但出现错误。我已将服务帐户用于日历 API、目录 API、电子邮件设置 API,但不适用于 AdminSettings。在以下位置尝试了示例代码:github.com/Khan/gdata-python-client/blob/master/samples/apps/adminsettings_example.py,但在使用正确的管理员帐户凭据时出现“需要授权”错误: API Client Acccess

from oauth2client.client import SignedJwtAssertionCredentials
import gdata.gauth
import gdata.apps.service
import gdata.apps.adminsettings.service

SERVICE_ACCOUNT_EMAIL = "XXXXXXXXXXXXX-ebirq08jvhldahbb482u8a1otu9n3l8p.apps.googleusercontent.com"
SERVICE_ACCOUNT_PKCS12_FILE_PATH = 'gapi_admin/privatekey.p12'
f = file(SERVICE_ACCOUNT_PKCS12_FILE_PATH, 'rb')
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key, scope='https://apps-apis.google.com/a/feeds/domain/', sub='admin@xxxtestmail.edu')
auth2token = gdata.gauth.OAuth2TokenFromCredentials(credentials)
service = gdata.apps.adminsettings.service.AdminSettingsService(source="testApp", domain='xxxtestmail.edu')
service = auth2token.authorize(service)

print service.GetCurrentNumberOfUsers()

#output
#TypeError: new_request() takes exactly 1 non-keyword argument (2 given)

在 OAuth2 Playground 中运行良好,查看 Screenshot

【问题讨论】:

    标签: python-2.7 google-admin-sdk google-admin-settings-api


    【解决方案1】:

    旧的 GData Python 库服务对象实际上并不支持您需要使用的 OAuth 2.0。但是,您可以在那里破解访问令牌。尝试类似:

    credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key, scope='https://apps-apis.google.com/a/feeds/domain/', sub='admin@xxxtestmail.edu')
    credentials.refresh(httplib2.Http())
    service = gdata.apps.adminsettings.service.AdminSettingsService(source="testApp", domain='xxxtestmail.edu')
    service.additional_headers[u'Authorization'] = u'Bearer {0}'.format(credentials.access_token)
    
    print service.GetCurrentNumberOfUsers()
    

    【讨论】:

    • 我收到“Bearer None”返回。在 Playground 中运行良好。我在postimg.org/image/kcr73m7y9 中包含了 OAuth 操场结果与代码执行的屏幕截图链接。请提供更多帮助?
    • 忘记了刷新凭据的一步,因此已填充访问令牌。立即尝试。
    • Jay,你帮了大忙!它现在有效!我希望其他人可以从您的帮助和这项工作中受益。这是结果的截图postimg.org/image/e5i8wnpid
    • 有没有办法在 .Net 中执行此操作?任何 NuGet 包中都没有这样的 AdminSettingsService。发送 JWT 断言后,我可以获得令牌,但对 API 的任何调用都会返回 403 错误:“您无权在域 xxx 上执行操作”。但是,我无法在 JWT 中包含“sub”,因为我在插入它时总是收到错误请求异常。
    • .Net 是一头完全不同的野兽,值得提出自己的问题。
    猜你喜欢
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2022-01-06
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多