我正在尝试为基于Web2py构建的一些REST API实现基于令牌的身份验证.我使用的是2.14.6版(稳定版).如文档中所述,我按照这些步骤操作,并能够使用JWT从受身份验证的资源中验证和检索数据.我已完成以下步骤:
from gluon.tools import AuthJWT
myjwt = AuthJWT(auth, secret_key='secret', user_param="email")
def login_take_token():
return myjwt.jwt_token_manager()
@myjwt.allows_jwt()
@auth.requires_login()
def get_my_service():
my_code
Run Code Online (Sandbox Code Playgroud)
因此,使用此配置,我可以在调用函数"login_take_token"时获取令牌,并从"get_my_service"获取所需数据.以下是服务电话:
/app/controller/login_take_token?email=abc.com&password=abc123
Run Code Online (Sandbox Code Playgroud)
这给我们一个令牌说
/app/controller/get_my_service?_token=<TOKEN_RECEIVED>
Run Code Online (Sandbox Code Playgroud)
这会在成功登录时返回所需的预期数据.
我的问题是,正如web2py文档中所解释的,如果令牌过期,我们可以使用令牌并调用login_take_token以获取新的活动令牌.但是这个下面的调用不返回任何令牌,但只返回400 Bad Request,输出"Token is expired".
/app/controller/login_take_token?_token=<TOKEN_RECEIVED>
Run Code Online (Sandbox Code Playgroud)
如何使用旧令牌(已过期)进行调用以获取新令牌.
问候
默认情况下,verify_expiration=True这意味着如果当前令牌已过期,您既不能验证也不能刷新令牌.如果要允许使用过期令牌进行刷新,则可以verify_expiration在请求刷新时有条件地更改(同时仍检查身份验证的到期时间):
def login_take_token():
myjwt.verify_expiration = False # This will allow refresh with an expired token.
return myjwt.jwt_token_manager()
Run Code Online (Sandbox Code Playgroud)
注意,还有一个附加参数,refresh_expiration_delta默认为60 * 60(即60分钟).如果发出原始令牌的时间大于refresh_expiration_delta,则刷新请求将被拒绝,并且需要重新进行身份验证以获取新令牌.
因此,默认过期时间为5分钟,默认刷新过期增量为60分钟,您可以获得最多12个刷新令牌,然后您将被迫重新进行身份验证(假设您每5分钟请求刷新一次).当然,refresh_expiration_delta如果要延长发布刷新令牌的时间,您可以设置更高的值.
| 归档时间: |
|
| 查看次数: |
817 次 |
| 最近记录: |