Saq*_*Ali 4 django rest restful-authentication django-authentication django-rest-framework
我目前有一个 Django 应用程序,它只是一堆 REST API(当然由数据库支持)。我正在使用Django REST framework JWT管理我的身份验证。它工作正常。每当用户登录时,我的 API 之一都会返回一个令牌,消费应用程序存储该令牌以供以后使用。到现在为止还挺好。
但是,将来,此解决方案需要扩展。而不是让单个服务器运行 Django 应用程序,我可以预见我需要多个 Web 服务器的情况。当然,所有这些网络服务器都将连接到同一个数据库。但是由于令牌未存储在数据库中,这将如何与多个 Web 服务器一起使用?一台服务器发出的令牌在另一台服务器上无效。
那么其他人是如何解决这个问题的呢??
详细说明:
首先来了解一下Django-Rest-Framework(DRF)提供的默认token认证和DRF-JWT提供的token的实现区别
DRF提供的Token
rest_framework.authentication.TokenAuthentication
令牌创建:
1) 创建令牌
Token.objects.create(用户=用户)
2)将step1创建的token存入数据库
3) 将令牌返回给客户端
令牌认证:
1)检查客户端传递的token是否存在数据库中
2)如果令牌存在,这意味着用户通过了身份验证
DRF-JWT 提供的Token
rest_framework_jwt.authentication.JSONWebTokenAuthentication
令牌创建:
1) 创建令牌
body = base64encode(header) + "." + base64encode(有效载荷)
signature = HMACSHA256_encode(body, 'secret_key') #secret key 通常在你的 settings.py 中指定
令牌 = 正文 + "." + 签名
2) 将令牌返回给客户端
令牌认证:
1)解码令牌
token_segment = token.split('.')
body = token_segment[0] + "." + token_segment[1]
签名 = token_segment[2]
decode_body = HMACSHA256_decode(签名,'secret_key')
2)如果decode_body等于body,则用户通过认证
结论
从上面的机制,我们可以安全地得出结论,JWT 方法更具可扩展性,因为它只依赖于 secret_key,并且每个 web 服务器都应该在 settings.py 下有 secret_key
因此,要回答您的问题,您无需担心缩放它:)
取决于您认为数据库受到攻击的频率。我的第一反应是缓存令牌并使用 memcached。Django 对此有很好的支持。如果您使用的是 GAE/Python 或 AWS 等云平台,情况会略有不同(配置方面),但两者都存在解决方案,而且并不是非常困难。
| 归档时间: |
|
| 查看次数: |
2851 次 |
| 最近记录: |