本文写的是django3实现jwt
官方文档
from datetime import timedelta...SIMPLE_JWT = {'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),'REFRESH_TOKEN_LIFETIME': timedelta(days=1),'ROTATE_REFRESH_TOKENS': False,'BLACKLIST_AFTER_ROTATION': True,'UPDATE_LAST_LOGIN': False,'ALGORITHM': 'HS256','SIGNING_KEY': settings.SECRET_KEY,'VERIFYING_KEY': None,'AUDIENCE': None,'ISSUER': None,'AUTH_HEADER_TYPES': ('Bearer',),'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION','USER_ID_FIELD': 'id','USER_ID_CLAIM': 'user_id','AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),'TOKEN_TYPE_CLAIM': 'token_type','JTI_CLAIM': 'jti','SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp','SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),}ACCESS_TOKEN_LIFETIME一datetime.timedelta指定长的访问令牌是如何有效的对象。该timedelta值会在令牌生成期间添加到当前UTC时间,以获得令牌的默认“ exp”声明值。REFRESH_TOKEN_LIFETIME一个datetime.timedelta对象,指定刷新令牌的有效时间。该timedelta值会在令牌生成期间添加到当前UTC时间,以获得令牌的默认“ exp”声明值。ROTATE_REFRESH_TOKENS设置True为时,如果将刷新令牌提交给 TokenRefreshView,则将返回新的刷新令牌以及新的访问令牌。这个新的刷新令牌将通过JSON响应中的“ refresh”键提供。新的刷新令牌将具有更新的到期时间,该时间通过将REFRESH_TOKEN_LIFETIME 设置中的timedelta与发出请求的当前时间相加来确定。如果正在使用黑名单应用程序且BLACKLIST_AFTER_ROTATION设置设置为True,则提交到刷新视图的刷新令牌将添加到黑名单中。BLACKLIST_AFTER_ROTATION设置为时,如果正在使用黑名单应用程序且设置设置为True,则导致提交给的刷新令牌 TokenRefreshView被添加到黑名单ROTATE_REFRESH_TOKENS中True。您需要添加'rest_framework_simplejwt.token_blacklist',到 INSTALLED_APPS设置文件中才能使用此设置。了解有关黑名单应用的更多信息。UPDATE_LAST_LOGIN设置True为时,auth_user表中的last_login字段在登录时更新(TokenObtainPairView)。警告:更新last_login将大大增加数据库事务的数量。滥用视图的人可能会降低服务器的速度,这可能是一个安全漏洞。如果确实要这样做,请至少使用DRF限制端点。ALGORITHMPyJWT库中的算法,将用于对令牌执行签名/验证操作。使用对称的HMAC签名和验证,可以使用以下算法:'HS256','HS384', 'HS512'。选择HMAC算法时,该SIGNING_KEY设置将同时用作签名密钥和验证密钥。在这种情况下,该 VERIFYING_KEY设置将被忽略。使用非对称RSA签名和验证,可以使用以下算法:'RS256','RS384', 'RS512'。选择RSA算法时,SIGNING_KEY必须将设置设置为包含RSA私钥的字符串。同样, VERIFYING_KEY必须将设置设置为包含RSA公钥的字符串。SIGNING_KEY用于对生成的令牌的内容进行签名的签名密钥。对于HMAC签名,这应该是一个随机字符串,其中的数据位数至少应与签名协议所需的位数相同。对于RSA签名,这应该是一个包含2048位或更长的RSA私钥的字符串。由于Simple JWT默认使用256位HMAC签名,因此该SIGNING_KEY设置默认SECRET_KEY为django项目的设置值。尽管这是Simple JWT可以提供的最合理的默认值,但是建议开发人员将此设置更改为与django项目秘密密钥无关的值。这将使更改令牌时使用的签名密钥更加容易。VERIFYING_KEY验证密钥,用于验证生成的令牌的内容。如果该ALGORITHM设置指定了HMAC算法, VERIFYING_KEY则将忽略该SIGNING_KEY 设置,并使用该设置的值。如果该ALGORITHM设置已指定RSA算法 ,则该VERIFYING_KEY设置必须设置为包含RSA公钥的字符串。AUDIENCE观众声称包含在生成的令牌中和/或在解码的令牌中经过验证。设置为时None,此字段将从令牌中排除,并且未经验证。ISSUER发行人声称包含在生成的令牌中和/或在解码的令牌中经过验证。设置为时None,此字段将从令牌中排除,并且未经验证。AUTH_HEADER_TYPES需要验证的视图将接受的授权标头类型。例如,值'Bearer'表示需要身份验证的视图将查找具有以下格式的标头: 。此设置还可能包含可能的标头类型(例如)的列表或元组。如果以这种方式使用列表或元组,并且身份验证失败,则集合中的第一项将用于在响应中构建“ WWW-Authenticate”标头。Authorization: Bearer <token>('Bearer', 'JWT')AUTH_HEADER_NAME用于身份验证的授权标头名称。默认值为HTTP_AUTHORIZATION接受Authorization请求中的标头。例如,如果你想使用X_Access_Token你的请求头请注明AUTH_HEADER_NAME是HTTP_X_ACCESS_TOKEN在你的设置。USER_ID_FIELD用户模型中的数据库字段,将包含在生成的令牌中以标识用户。建议此设置的值指定一个字段,一旦选择其初始值,该字段通常不会更改。例如,指定“用户名”或“电子邮件”字段将是一个糟糕的选择,因为帐户的用户名或电子邮件可能会更改,具体取决于给定服务中帐户管理的设计方式。这可以允许使用旧的用户名创建新帐户,而现有令牌仍有效,该令牌使用该用户名作为用户标识符。USER_ID_CLAIM所产生的令牌中的声明将用于存储用户标识符。例如,的设置值'user_id'将意味着生成的令牌包括包含用户标识符的“ user_id”声明。AUTH_TOKEN_CLASSES类的点路径列表,这些类指定了允许证明身份验证的令牌类型。有关更多信息,请参见下面的“令牌类型”部分。TOKEN_TYPE_CLAIM用于存储令牌类型的声明名称。有关更多信息,请参见下面的“令牌类型”部分。JTI_CLAIM声明名称,用于存储令牌的唯一标识符。此标识符用于识别黑名单应用中的已撤销令牌。在某些情况下,可能有必要使用默认的“ jti”声明以外的其他声明来存储该值。SLIDING_TOKEN_LIFETIME一个datetime.timedelta对象,它指定滑动令牌有效以证明身份验证的时间。该timedelta值会在令牌生成期间添加到当前UTC时间,以获得令牌的默认“ exp”声明值。有关更多信息,请参见下面的“滑动令牌”部分。SLIDING_TOKEN_REFRESH_LIFETIME一个datetime.timedelta对象,指定要刷新的滑动令牌有效的时间。该timedelta值会在令牌生成期间添加到当前UTC时间,以获得令牌的默认“ exp”声明值。有关更多信息,请参见下面的“滑动令牌”部分。SLIDING_TOKEN_REFRESH_EXP_CLAIM用于存储滑动令牌的刷新周期的到期时间的声明名称。有关更多信息,请参见下面的“滑动令牌”部分。
