Django 我可以在一个站点中混合会话身份验证和令牌身份验证吗?
我有django应用程序使用会话身份验证。我需要添加API部分。此API将仅由my app.users(网络浏览器和手机设备)使用。我更愿意为API使用令牌身份验证,因为它看起来更健壮。我发现它可以处理它。 我的问题:我可以在一个站点中混合使用web会话身份验证和API令牌身份验证吗? 我认为web应用程序和API应用程序是两种不同的应用程序。所以我想在我的项目中将它们分开,使用不同的子域,并对每个子域使用不同的身份验证。是否可以按子域分隔身份验证?我想在用户登录到web应用时发送令牌。这是一个好主意吗?如中所示,您可以配置多个身份验证后端,而不会出现任何问题。DRF只需尝试每个后端,直到其中一个说“ok” 要记住一件事: 如果您(例如)提供了无效的JSON Web令牌,则身份验证将立即失败,并且不会尝试其他后端。很高兴在公园里看到你Django 我可以在一个站点中混合会话身份验证和令牌身份验证吗?,django,authentication,django-rest-framework,jwt,Django,Authentication,Django Rest Framework,Jwt,我有django应用程序使用会话身份验证。我需要添加API部分。此API将仅由my app.users(网络浏览器和手机设备)使用。我更愿意为API使用令牌身份验证,因为它看起来更健壮。我发现它可以处理它。 我的问题:我可以在一个站点中混合使用web会话身份验证和API令牌身份验证吗? 我认为web应用程序和API应用程序是两种不同的应用程序。所以我想在我的项目中将它们分开,使用不同的子域,并对每个子域使用不同的身份验证。是否可以按子域分隔身份验证?我想在用户登录到web应用时发送令牌。这是一个
表示后端说:“这不是JWT,让其他人试试。”return None
的意思是:“用户尝试了JWT,但他失败了。”引发异常。AuthenticationFailed(msg)
- 不需要在单独的应用程序中执行此操作(但如果您愿意,这也没问题)
- 如中所述,您可以为身份验证后端定义全局默认值,但也可以根据
或视图
覆盖它们视图集
def authenticate(self, request):
"""
Returns a two-tuple of `User` and token if a valid signature has been
supplied using JWT-based authentication. Otherwise returns `None`.
"""
auth = get_authorization_header(request).split()
if not auth or auth[0].lower() != b'jwt':
return None
if len(auth) == 1:
msg = 'Invalid JWT header. No credentials provided.'
raise exceptions.AuthenticationFailed(msg)
elif len(auth) > 2:
msg = ('Invalid JWT header. Credentials string '
'should not contain spaces.')
raise exceptions.AuthenticationFailed(msg)
try:
payload = jwt_decode_handler(auth[1])
except jwt.ExpiredSignature:
msg = 'Signature has expired.'
raise exceptions.AuthenticationFailed(msg)
except jwt.DecodeError:
msg = 'Error decoding signature.'
raise exceptions.AuthenticationFailed(msg)
user = self.authenticate_credentials(payload)
return (user, auth[1])