[英]Storing OAuth Token in Python Library
我有一个Python服务,它导入一个与PayPal API对话的库。 有一个配置文件传递到库__init__()
,其中包含PayPal API用户名和密码。
使用用户名和密码调用PayPal API令牌端点将返回用于在付费呼叫期间进行身份验证的令牌。 但是,此令牌持续90分钟,应该重复使用。
在不同的服务器上运行此服务的多个实例,并且他们需要共享这一个秘密令牌。
存储这9分钟令牌的最佳方式是什么?
虽然您可以将其保留在数据库中,因为它仅在90分钟内有效,您可以考虑使用像Redis这样的内存数据存储。 它的设置非常简单,并且有各种Python客户端可用 。
Redis特别支持设置值时的到期时间,因此您可以确保它只会保留一段时间。 当然,如果由于某种原因密钥早期失效,您仍应该进行异常处理。
虽然如果您还没有使用键值存储,这可能会引入软件依赖性,但是从您的问题中不清楚该库是如何使用的,因此这是否是一个问题。
如果无法安装其他软件,则可以使用临时文件。 但是,由于Python的临时文件似乎不支持直接设置临时文件的名称,因此您可能必须手动处理文件管理。 例如:
import os
import time
import tempfile
# 90 minutes in seconds. Setting this a little lower would
# probably be better to account for network latency.
MAX_AGE = 90 * 60
# /tmp/libname/ needs to exist for this to work; creating it
# if necessary shouldn't give you much trouble.
TOKEN_PATH = os.path.join(
tempfile.gettempdir(),
'libname',
'paypal.token',
)
def get_paypal_token():
token = None
if os.path.isfile(TOKEN_PATH):
token_age = time.time() - os.path.getmtime(TOKEN_PATH)
if token_age < MAX_AGE:
with open(TOKEN_PATH, 'r') as infile:
# You might consider a test API call to establish token validity here.
token = infile.read()
if not token:
# Get a token from the PayPal API and write it to TOKEN_PATH.
token = 'dummy'
with open(TOKEN_PATH, 'w') as outfile:
outfile.write(token)
return token
根据环境的不同,您可能希望查看限制此临时文件的权限。 但是,无论您如何持久化令牌,此代码都应该是一个有用的示例。 我不会对在文件系统上粘贴这样的东西感到兴奋,但是如果你已经有用于在磁盘上请求令牌的PayPal凭证,那么将令牌写入临时存储可能不是什么大问题。
您可以将令牌存储为系统变量 。
import os
# Store token
os.environ['PAYPAL_API_TOKEN'] = <...>
# Retrieve token
token = os.environ['PAYPAL_API_TOKEN']
但请注意安全隐患:其他进程可以读取令牌。
就像一个信息:PayPal访问令牌在9小时内到期,而不是90分钟:
“expires_in”:32400
这个时间是几秒钟: https : //developer.paypal.com/docs/api/get-an-access-token-postman/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.