我正在尝试通过 API 上传 Chrome 扩展程序。第一步是获取 oauth-token 但我收到此错误:
{
"error": "invalid_grant",
"error_description": "Invalid issuer: null"
}
这是我的脚本:
# pip install pyjwt
import jwt
import time
import base64
import requests
import json
from copy import copy
JWT_INPUT = '{header}.{claim_set}'
HEADER = {"alg":"RS256", "typ":"JWT"}
ALGORITHM = 'RS256' # required by google
EMAIL = 'deploy@<Service account ID>.iam.gserviceaccount.com'
# TODO: which one is correct? any?
SCOPE = 'https://www.googleapis.com/auth/chromewebstore https://www.googleapis.com/auth/chromewebstore.admin'
HOST = 'https://www.googleapis.com/oauth2/v4/token'
HEADERS = {
'Content-Type': 'application/x-www-form-urlencoded',
}
CLAIM_SET = {
"iss": EMAIL,
"scope": SCOPE,
"aud": "https://www.googleapis.com/oauth2/v4/token",
"exp": None, # now +1h since epoch
"iat": None # now since epoch
}
claim_set = copy(CLAIM_SET)
claim_set['iat'] = int(time.time())
claim_set['exp'] = claim_set['iat'] + 60 * 60
data = {
'header': base64.b64encode(json.dumps(HEADER)),
'claim_set': base64.b64encode(json.dumps(claim_set)),
}
jwt_string = JWT_INPUT.format(**data)
jwt_token = jwt.encode(data, open('private.key').read(), algorithm='RS256')
print jwt_token
print
params = {
'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer',
'assertion': jwt_token,
}
response = requests.post(HOST, data=params, headers=HEADERS)
print response.content