【发布时间】:2020-06-04 15:43:59
【问题描述】:
我不确定是否真的了解how refresh tokens are supposed to be stored/checked。从这个参考资料和我读过的其他内容来看,我觉得存储每个刷新令牌的所有权是有意义的。然后,此信息可用于撤销某些给定用户的刷新令牌,并为指定用户创建新的访问令牌。 (如果我错了,请纠正我)
但是当用户尝试获取新的访问令牌时尝试检查用户的身份是否有意义?例如,我只是在 刷新令牌端点中进行了这个简单的检查:
async def refresh_access_token(request):
data = await request.form()
query = database.session.query(RefreshToken)
refresh_token = query.filter(RefreshToken.id == data['refresh_token']).first()
if refresh_token is None or refresh_token.expires < utcnow():
raise SomeError("...")
这几乎是我在为与此 refresh_token 关联的用户发出新访问令牌之前唯一要做的事情(我发送第二个请求,使用来自此 refresh_token 的所有者标识符从我的数据库中获取用户)。
同时询问用户的身份是否有意义?例如使用(可能过期的)访问令牌?还是刷新令牌应该是自给自足的?
再次,例如,也许是消歧:
access_token = request.headers['Authorization']
payload = jwt.decode(access_token, str(JWT_SECRET_KEY), options={'verify_exp': False})
如果签名不匹配,代码jwt.decode 将引发InvalidSignatureError。 (jwt 来自PyJWT)。
在发布新的访问令牌坏/好/必要之前添加这种身份检查吗?
【问题讨论】:
标签: python jwt refresh-token