发行新的访问令牌是否需要检查刷新令牌所有权?

问题描述 投票:0回答:1

我不确定是否真正理解 刷新令牌应该如何存储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).

在发放新的访问令牌之前,加入这种身份检查是否是badgoodessential?

python jwt refresh-token
1个回答
1
投票

有必要检查刷新令牌的所有权吗?

简而言之,这里的答案是不,它不属于任何OAuth2 RFC的一部分。

然而,应用程序可以强制执行的东西是刷新令牌和客户端ID或秘密关联。

一个刷新请求应该像下面的例子一样

POST /oauth/token HTTP/1.1
Host: authorization-server.com

grant_type=refresh_token
&refresh_token=xxxxxxxxxxx
&client_id=xxxxxxxxxx
&client_secret=xxxxxxxxxx

任何其他客户端都不应该拥有与给定刷新令牌相关联的秘密,每个客户端通常只给一个,所以许多应用程序检查刷新令牌的 "所有权",以确保它没有被泄露。

© www.soinside.com 2019 - 2024. All rights reserved.