我正在使用与RESTful api接口的python构建命令行工具。 API使用oauth2进行身份验证。而不是每次用户运行python工具时都要求access_token。我可以以某种方式存储access_token,以便我可以使用它直到它的生命周期?如果它是多么安全。
答案 0 :(得分:2)
您可以将访问令牌存储在用户桌面上的文件中。
您可以使用存储空间执行此操作。假设您使用oauth2client
:
# Reading credentials
store = oauth2client.file.Storage(cred_path)
credentials = store.get()
# Writing credentials
creds = client.AccessTokenCredentials(access_token, user_agent)
creds.access_token = access_token
creds.refresh_token = refresh_token
creds.client_id = client_id
creds.client_secret = client_secret
# For some reason it does not save all the credentials,
# so write them to a json file manually instead
with open(credential_path, "w") as f:
f.write(creds.to_json)
在安全性方面,我不会在这里看到太多威胁,因为这些访问令牌将在用户的桌面上。如果有人想要获取他们的访问令牌,他们需要在该时间段内具有对该文件的读访问权。但是,如果他们已经可以这样做,他们很可能也会使用您的脚本在每次验证时向他们发送用户访问令牌的副本。但是轻轻地说出我的话,因为我不是那个领域的专业人士。请参阅information security stack exchange。
信息安全堆栈交换中的post确实谈到了这个问题:
这些令牌可以访问有关您用户的一些相当特权的信息。
但是,问题是针对数据库而已。
总之,您可以将其保存在文件中。 (但是,我的意思是我的话)
答案 1 :(得分:1)
您想将其存储在服务端还是本地?
由于您的工具接口RESTful API(无状态),这意味着在不同的API请求之间不存储任何信息,因此每次客户端访问任何REST端点时,您实际上都需要提供访问令牌。我可能错过了您设计中的一些细节,但访问令牌只能用于授权,因为如果用户已经有令牌,则您的用户已经过身份验证。这就是为什么令牌仅在一定时间内有效,通常为1小时。
因此,您需要通过使用cookie(Web界面)或在本地存储令牌来提供状态(这就是您的意思)。但是,每次用户登录到客户端(验证用户身份并提供新的身份验证令牌)时,都应触发整个oauth流,否则您将无法利用oauth的优势。