基于 Web2py JWT 的身份验证 - 刷新令牌
Web2py JWT based authentication - refresh token
我正在尝试为某些基于 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
因此,通过此配置,我可以在调用函数 "login_take_token" 时获取令牌,还可以从 "get_my_service" 获取所需的数据。以下是服务电话:
/app/controller/login_take_token?email=abc.com&password=abc123
这 return 是我们的一个象征
/app/controller/get_my_service?_token=<TOKEN_RECEIVED>
这 return 向我们提供了成功登录所需的预期数据。
我的问题是,如 web2py 文档中所述,如果令牌已过期,我们可以使用该令牌并调用 login_take_token
以获取新的活动令牌。但是下面的调用没有 return 任何标记,只有 returns 400 Bad Request,输出为 "Token is expired".
/app/controller/login_take_token?_token=<TOKEN_RECEIVED>
旧token(过期)调用如何获取新token。
此致
默认情况下,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()
请注意,还有一个附加参数 refresh_expiration_delta
,默认为 60 * 60
(即 60 分钟)。如果自原始令牌颁发以来的时间大于 refresh_expiration_delta
,刷新请求将被拒绝,并且需要重新验证以获取新令牌。
因此,在默认的 5 分钟到期时间和 60 分钟的默认刷新到期增量的情况下,您最多可以获得 12 个刷新令牌,然后您将被迫重新进行身份验证(假设您每 5 分钟请求一次刷新分钟)。当然,如果您想延长刷新令牌的发布周期,您可以将 refresh_expiration_delta
设置为更高的值。
我正在尝试为某些基于 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
因此,通过此配置,我可以在调用函数 "login_take_token" 时获取令牌,还可以从 "get_my_service" 获取所需的数据。以下是服务电话:
/app/controller/login_take_token?email=abc.com&password=abc123
这 return 是我们的一个象征
/app/controller/get_my_service?_token=<TOKEN_RECEIVED>
这 return 向我们提供了成功登录所需的预期数据。
我的问题是,如 web2py 文档中所述,如果令牌已过期,我们可以使用该令牌并调用 login_take_token
以获取新的活动令牌。但是下面的调用没有 return 任何标记,只有 returns 400 Bad Request,输出为 "Token is expired".
/app/controller/login_take_token?_token=<TOKEN_RECEIVED>
旧token(过期)调用如何获取新token。
此致
默认情况下,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()
请注意,还有一个附加参数 refresh_expiration_delta
,默认为 60 * 60
(即 60 分钟)。如果自原始令牌颁发以来的时间大于 refresh_expiration_delta
,刷新请求将被拒绝,并且需要重新验证以获取新令牌。
因此,在默认的 5 分钟到期时间和 60 分钟的默认刷新到期增量的情况下,您最多可以获得 12 个刷新令牌,然后您将被迫重新进行身份验证(假设您每 5 分钟请求一次刷新分钟)。当然,如果您想延长刷新令牌的发布周期,您可以将 refresh_expiration_delta
设置为更高的值。