use*_*855 3 python paypal oauth
我有一个Python服务,该服务导入了一个与PayPal API对话的库。有一个配置文件被传递到该库中__init__(),其中包含PayPal API用户名和密码。
使用用户名和密码调用PayPal API令牌终结点将返回用于在付费呼叫期间进行身份验证的令牌。但是,此令牌持续90分钟,应重新使用。
此服务有多个实例在不同的服务器上运行,它们都需要共享一个秘密令牌。
存储这9分钟的令牌的最佳方法是什么?
尽管您可以将其保留在数据库中,但由于只能使用90分钟,因此您可以考虑使用内存数据存储,例如Redis。设置非常简单,并且有各种Python客户端可用。
尤其是Redis在设置值时支持过期时间,因此您可以确保将其保留一定的时间。当然,如果出于某种原因使密钥较早失效,您仍应具有异常处理功能。
如果您还没有使用键值存储,虽然这可能会引入软件依赖性,但是从您的问题尚不清楚该库是如何使用的,因此这是否是个问题。
如果无法安装其他软件,则可以使用一个临时文件。但是,由于Python的tempfile似乎不支持直接设置临时文件的名称,因此您可能必须手动处理文件管理。例如:
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
Run Code Online (Sandbox Code Playgroud)
根据环境的不同,您可能希望研究限制此临时文件的权限。但是,无论您如何持久保存令牌,此代码都应该是一个有用的示例。我不会在文件系统上粘贴这样的东西而感到兴奋,但是如果您已经具有用于在磁盘上请求令牌的PayPal凭据,那么将令牌写入临时存储可能就没什么大不了了。