是否可以将身份验证令牌存储在单独的文件中?

Is it possible to store authentication token in a separate file?

我正在使用 python 构建一个与 RESTful api 接口的命令行工具。 API 使用 oauth2 进行身份验证。而不是每次用户运行 python 工具时都要求 access_token。我可以以某种方式存储 access_token 以便我可以使用它直到它的使用寿命吗?如果是那么它有多安全。

您可以将访问令牌存储在用户桌面上的文件中。

您可以使用存储来做到这一点。假设您使用 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

information security stack exchange中的一个post确实讲过这个:

these tokens give access to some fairly privileged information about your users.

但是,问题是针对数据库的。

总之,您可以将其保存在文件中。 (但请相信我的话)

是存储在服务端还是本地?

由于您的工具接口 RESTful API,它是无状态的,这意味着在对 API 的不同请求之间不存储任何信息,实际上您每次都需要提供访问令牌客户端访问任何 REST 端点。我可能遗漏了您设计中的一些细节,但访问令牌应该仅用于授权,因为如果您的用户拥有令牌,则他已经通过身份验证。这就是令牌仅在一定时间内有效的原因,通常是 1 小时。

因此您需要通过使用 cookie(网络界面)或在本地存储令牌(这就是您的意思)来提供状态。但是,每次用户登录到您的客户端(验证用户并提供新的身份验证令牌)时,您都应该触发整个 oauth 流程,否则您就没有利用 oauth 的好处。