是否有必要检查刷新令牌所有权以颁发新的访问令牌?
Is it necessary to check refresh tokens ownership to issue new access tokens?
我不确定是否真正理解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 if the signature didn't match. (jwt
come from PyJWT)。
是否在颁发新访问令牌之前添加这种身份检查bad/good/essential?
Is it necessary to check refresh tokens ownership
这里的简短回答是不,它不属于任何 OAuth2 RFC。
然而,应用程序可能强制执行的是刷新令牌和客户端 ID and/or 秘密关联。
刷新请求应如下例所示
POST /oauth/token HTTP/1.1
Host: authorization-server.com
grant_type=refresh_token
&refresh_token=xxxxxxxxxxx
&client_id=xxxxxxxxxx
&client_secret=xxxxxxxxxx
任何其他客户端都不应该拥有与给定刷新令牌关联的秘密,每个客户端通常只获得一个如此多的应用程序检查刷新令牌的 "ownership" 以确保它没有被泄露。
我不确定是否真正理解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 if the signature didn't match. (jwt
come from PyJWT)。
是否在颁发新访问令牌之前添加这种身份检查bad/good/essential?
Is it necessary to check refresh tokens ownership
这里的简短回答是不,它不属于任何 OAuth2 RFC。
然而,应用程序可能强制执行的是刷新令牌和客户端 ID and/or 秘密关联。
刷新请求应如下例所示
POST /oauth/token HTTP/1.1
Host: authorization-server.com
grant_type=refresh_token
&refresh_token=xxxxxxxxxxx
&client_id=xxxxxxxxxx
&client_secret=xxxxxxxxxx
任何其他客户端都不应该拥有与给定刷新令牌关联的秘密,每个客户端通常只获得一个如此多的应用程序检查刷新令牌的 "ownership" 以确保它没有被泄露。