我尝试使用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 错误。
我的问题:
flow
进行身份验证的情况下检索用于Chrome网上应用店API的有效authToken。答案 0 :(得分:2)
可能。服务帐户不您自己的Google帐户。
说不上。抱歉,不熟悉Chrome Store API。您可以使用Oauth Playground测试可能性,而无需编写任何代码。
通过“离线访问”授权一次,这将返回刷新令牌。即使未登录,您也可以随时使用它来请求访问令牌。顺便说一句,没有“认可”这样的东西。有一个授权码,还有一个访问令牌。在您的情况下,它是您感兴趣的访问令牌。
答案 1 :(得分:2)
我的剧本实际上有两个问题。
用户
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
API call to get an item具有必需的查询参数projection
,其值为draft
或published
。它在documentation中声明为可选,但实际上是必需的。
通过这两项更改,API可以与http对象一起使用。感谢所有帮助我找到解决方案的人,感谢Google支持人员,他们指出了所需的参数。