如果有人之前已经问过这个问题,请提前道歉,但我已经有一些关于服务器端Python脚本的基本问题我写的每夜上传CSV文件到我们Google的文件夹中开车帐户。文件夹所有者已创建Google API项目,为此启用了Drive API,并创建了一个我已作为JSON文件下载的凭据对象。该文件夹已与服务帐户电子邮件共享,因此我认为该脚本一旦获得授权,即可访问此文件夹。
JSON文件包含以下字段private_key_id
,private_key
,client_email
,client_id
,auth_uri
,token_uri
,{{1} },auth_provider_x509_cert_url
。
我猜测我的脚本不需要所有这些 - 这是OAuth2授权的必要或必填字段?
此处给出的示例Python脚本
https://developers.google.com/drive/web/quickstart/python
似乎假设直接从JSON文件中检索凭证:
client_x509_cert_url
但是在我们的设置中,我们将它们存储在我们自己的数据库中,脚本通过dict访问它们。如果证书在dict中,授权将如何进行?
提前致谢。
答案 0 :(得分:2)
浏览源代码后,似乎只能接受JSON文件。他们正在使用simplejson进行编码和解码。看一下源代码:
This是从您提供的文件中获取内容的地方:
62 def locked_get(self):
63 """Retrieve Credential from file.
64
65 Returns:
66 oauth2client.client.Credentials
67
68 Raises:
69 CredentialsFileSymbolicLinkError if the file is a symbolic link.
70 """
71 credentials = None
72 self._validate_file()
73 try:
74 f = open(self._filename, 'rb')
75 content = f.read()
76 f.close()
77 except IOError:
78 return credentials
79
80 try:
81 credentials = Credentials.new_from_json(content) #<----!!!
82 credentials.set_store(self)
83 except ValueError:
84 pass
85
86 return credentials
在new_from_json中,他们尝试使用simplejson解码内容。
205 def new_from_json(cls, s):
206 """Utility class method to instantiate a Credentials subclass from a JSON
207 representation produced by to_json().
208
209 Args:
210 s: string, JSON from to_json().
211
212 Returns:
213 An instance of the subclass of Credentials that was serialized with
214 to_json().
215 """
216 data = simplejson.loads(s)
长话短说,似乎你必须从你的dict构造一个JSON文件。见this。基本上,您需要json.dumps(your_dictionary)
并创建一个文件。
答案 1 :(得分:0)
实际上看起来SignedJwtAssertionCredentials
可能是一个答案。另一个可能是
from oauth2client import service_account
...
credentials = service_account._ServiceAccountCredentials(
service_account_id=client.clid,
service_account_email=client.email,
private_key_id=client.private_key_id,
private_key_pkcs8_text=client.private_key,
scopes=client.auth_scopes,
)
....