本文写的是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限制端点。
ALGORITHM
PyJWT库中的算法,将用于对令牌执行签名/验证操作。使用对称的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
用于存储滑动令牌的刷新周期的到期时间的声明名称。有关更多信息,请参见下面的“滑动令牌”部分。