使用带有OAuth2服务帐户的Chrome Store Publishing API

时间:2015-04-10 17:35:39

标签: python google-oauth google-chrome-app chrome-web-store

我尝试使用Chrome Web Store Publishing API以编程方式更新Chrome应用。

我需要使用服务器到服务器的身份验证方法,因此在我的项目的Google developer console上创建了一个oauth2服务帐户。并将凭据下载为key.p12。

然后我尝试使用Google API Client for Python。即使API不支持Chrome网上应用店,也应该可以使用它的一部分。

我在Python中创建了一个小脚本,试图获取我的Chrome网上应用店项目列表:

"""Creates a connection to Google Chrome Webstore Publisher API."""

from apiclient.discovery import build
import httplib2
from oauth2client import client

import os

SERVICE_ACCOUNT_EMAIL = (
    '_SOME_126736126931_RUBISH_@developer.gserviceaccount.com')

def getservice():
    # get relative path to p12 key
  dir = os.path.dirname(__file__)
  filename = os.path.join(dir, 'key.p12')

  # Load the key in PKCS 12 format that you downloaded from the Google APIs
  # Console when you created your Service account.
  f = file(filename, 'rb')
  key = f.read()
  f.close()

  # Create an httplib2.Http object to handle our HTTP requests and authorize it
  # with the Credentials. Note that the first parameter, service_account_name,
  # is the Email address created for the Service account. It must be the email
  # address associated with the key that was created.
  credentials = client.SignedJwtAssertionCredentials(
      SERVICE_ACCOUNT_EMAIL,
      key,
      scope='https://www.googleapis.com/auth/chromewebstore.readonly')
  http = httplib2.Http()
  http = credentials.authorize(http)

  response = http.request('https://www.googleapis.com/chromewebstore/v1.1/items/[___my_chrome_webstore_app_id___]')

  print response

即使https://www.googleapis.com/auth/chromewebstore.readonly身份验证 成功,响应也会导致 403 错误。

我的问题:

  1. 403是否会发生,因为服务帐户无法访问我的Google Chrome网上论坛商品?
  2. 是否可以在不使用我的个人帐户进行身份验证和使用Chrome Store API,该帐户会发布到网上商店(但是已连接的服务帐户)?
  3. 如何在不让用户通过flow进行身份验证的情况下检索用于Chrome网上应用店API的有效authToken。

2 个答案:

答案 0 :(得分:2)

  1. 403是否会发生,因为服务帐户无法访问我的Google Chrome网上论坛商品?
  2. 可能。服务帐户您自己的Google帐户。

    1. 是否可以在不使用我的个人帐户进行身份验证和使用Chrome Store API,该帐户会发布到网上商店(但是已连接的服务帐户)?
    2. 说不上。抱歉,不熟悉Chrome Store API。您可以使用Oauth Playground测试可能性,而无需编写任何代码。

      1. 如何在没有用户通过流程进行身份验证的情况下检索用于Chrome网上应用店API的有效authToken。
      2. 通过“离线访问”授权一次,这将返回刷新令牌。即使未登录,您也可以随时使用它来请求访问令牌。顺便说一句,没有“认可”这样的东西。有一个授权码,还有一个访问令牌。在您的情况下,它是您感兴趣的访问令牌。

答案 1 :(得分:2)

我的剧本实际上有两个问题。

  1. 用户

    a)要使服务帐户代表将项目发布到Chrome网上应用店的用户,您需要在创建凭据时添加子参数:

      

    credentials = client.SignedJwtAssertionCredentials(   SERVICE_ACCOUNT_EMAIL,密钥,范围=' https://www.googleapis.com/auth/chromewebstore.readonly',sub =' the.user.who.published.the.item@gmail.com')

    b)如果用户是Google Apps域的一部分,则需要通过Google Apps Dashboard > Security > Extended Settings > Manage API access

  2. 授予Chrome网上应用店发布API对域范围用户的访问权限
  3. API call to get an item具有必需的查询参数projection,其值为draftpublished。它在documentation中声明为可选,但实际上是必需的。

  4. 通过这两项更改,API可以与http对象一起使用。感谢所有帮助我找到解决方案的人,感谢Google支持人员,他们指出了所需的参数。