Python 用于使用OAuth2服务帐户存储发布API

Python 用于使用OAuth2服务帐户存储发布API,python,google-oauth,google-chrome-app,chrome-web-store,Python,Google Oauth,Google Chrome App,Chrome Web Store,我尝试通过使用以编程方式更新chrome应用程序 我需要使用服务器到服务器的身份验证方法,并因此在上为我的项目创建了一个oauth2服务帐户。并将凭据下载为key.p12 然后我试着用这个。即使API不支持Chrome Web Store,也应该可以使用它的一部分 我用Python创建了一个小脚本,试图获取我的Chrome Web应用商店项目列表: """Creates a connection to Google Chrome Webstore Publisher API.""" from

我尝试通过使用以编程方式更新chrome应用程序

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

然后我试着用这个。即使API不支持Chrome Web Store,也应该可以使用它的一部分

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

"""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
即使验证成功,响应也会导致403错误

我的问题是:

是否因为服务帐户没有访问我的google chrome webstore项目的权限而发生403错误? 是否可以在不使用我的个人帐户的情况下对Chrome Store API进行身份验证和使用?我的个人帐户发布到web Store,但不使用连接的服务帐户? 在没有用户通过流进行身份验证的情况下,如何检索用于Chrome Web Store API的有效authToken。 是否因为服务帐户没有访问我的google chrome webstore项目的权限而发生403错误? 可能吧。服务帐户不是你自己的谷歌帐户

是否可以在不使用我的个人帐户的情况下对Chrome Store API进行身份验证和使用?我的个人帐户发布到web Store,但不使用连接的服务帐户? 不知道。抱歉,不熟悉Chrome商店API。您可以使用Oauth操场来测试这些可能性,而无需编写任何代码

在没有用户通过流进行身份验证的情况下,如何检索用于Chrome Web Store API的有效authToken。 通过使用脱机访问授权一次,将返回一个刷新令牌。您可以随时使用它来请求访问令牌,即使未登录。顺便说一句,没有authtoken这样的东西。有一个授权码和一个访问令牌。在您的情况下,它是您感兴趣的访问令牌

是否因为服务帐户没有访问我的google chrome webstore项目的权限而发生403错误? 可能吧。服务帐户不是你自己的谷歌帐户

是否可以在不使用我的个人帐户的情况下对Chrome Store API进行身份验证和使用?我的个人帐户发布到web Store,但不使用连接的服务帐户? 不知道。抱歉,不熟悉Chrome商店API。您可以使用Oauth操场来测试这些可能性,而无需编写任何代码

在没有用户通过流进行身份验证的情况下,如何检索用于Chrome Web Store API的有效authToken。
通过使用脱机访问授权一次,将返回一个刷新令牌。您可以随时使用它来请求访问令牌,即使未登录。顺便说一句,没有authtoken这样的东西。有一个授权码和一个访问令牌。在您的情况下,它是您感兴趣的访问令牌。

我的脚本实际上有两个问题

使用者

a要使服务帐户代表向chrome web store发布项目的用户,您需要在创建凭据时添加一个子参数:

凭据=client.SignedJwtAssertionCredentials 服务\帐户\电子邮件,键,作用域=,子='the.user.who.published.the。item@gmail.com"

b如果用户是Google应用程序域的一部分,则需要在以下位置向域范围内的用户授予Chrome Web Store Publish API访问权限:

具有所需的查询参数投影,其值为draft或published。在中声明为可选,但实际上是必需的


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

我的脚本实际上有两个问题

使用者

a要使服务帐户代表向chrome web store发布项目的用户,您需要在创建凭据时添加一个子参数:

凭据=client.SignedJwtAssertionCredentials 服务\帐户\电子邮件,键,作用域=,子='the.user.who.published.the。item@gmail.com"

b如果用户是Google应用程序域的一部分,则需要在以下位置向域范围内的用户授予Chrome Web Store Publish API访问权限:

具有所需的查询参数投影,其值为draft或published。在中声明为可选,但实际上是必需的


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

谢谢,你有到Oauth游乐场的链接吗?感谢@pinoyyid为我指出游乐场,这是一个很棒的工具!不幸的是,我仍然无法访问带有游乐场的chrome网站商店。我尝试进行流授权,并允许访问我的个人
开发者帐户是我发布chrome webstore应用程序时使用的帐户。我得到了的范围的身份验证代码和访问令牌,但如果我尝试使用该令牌,我仍然会得到403。我使用本指南创建标题:尝试在访问令牌中插入一些随机字符,然后查看错误是否从403变为401。这可能有助于缩小问题的范围。否则我就没主意了:-是的,如果令牌被随机字符弄乱了,那么结果会变成401。因此,我认为身份验证是成功的,但不知何故,我无权访问该项目或其他内容。我不知道如何在Store API和我的帐户之间建立连接?@Rias您的物品是在哪个帐户下发布的?团体出版商?一个独立的出版商,你正试图以它的身份登录?谢谢,你有Oauth游乐场的链接吗?谢谢@pinoyyid为我指点游乐场,这是一个很棒的工具!不幸的是,我仍然无法访问带有游乐场的chrome网站商店。我尝试进行流量授权,并允许访问我发布chrome webstore应用程序的个人开发者帐户。我得到了的范围的身份验证代码和访问令牌,但如果我尝试使用该令牌,我仍然会得到403。我使用本指南创建标题:尝试在访问令牌中插入一些随机字符,然后查看错误是否从403变为401。这可能有助于缩小问题的范围。否则我就没主意了:-是的,如果令牌被随机字符弄乱了,那么结果会变成401。因此,我认为身份验证是成功的,但不知何故,我无权访问该项目或其他内容。我不知道如何在Store API和我的帐户之间建立连接?@Rias您的物品是在哪个帐户下发布的?团体出版商?一个单独的发布者,而您正试图以它的身份登录?