Django-Rest框架的加密密钥对授权
drf-keypair-permissions的Python项目详细描述
Django-Rest框架的加密密钥对授权
有关完整文档,请访问drf-keypair-permissions.readthedocs.io。在
创建这个Django模块是为了给Django Rest框架提供“空穴”HTTP签名功能。在
这使得基于公钥/私钥加密的HTTP授权成为会话cookie或API令牌的替代方案。在
在Django代码中,它看起来像这样:
fromkeypair_permissions.permissionsimportHasHttpCryptoAuthorizationclassEchoServerApiView(GenericApiView):permission_classes=[HasHttpCryptoAuthorization]defget(self,request):returnResponse(request.body)
这样做需要一个Authorization
HTTP头,如下所示:
此授权头是通过在客户端上使用私钥对请求头进行签名来创建的。然后,服务器通过使用客户机的公钥验证签名来验证该请求是否由已知客户机发送。在
此外,还可以添加一个Digest
报头,以确保请求正文被及时传输:
Digest: SHA512=WZDPaVn/7XgHaAy8pmojAkGWoRx2UFChF41A2svX+TaPm+AbwAgBWnrIiYllu7BNNyealdVLvRwEmTHWXvJwew==
每个公钥都可以与Django用户关联,因此可以从视图访问该用户:
classEchoServerApiView(GenericApiView):permission_classes=[HasHttpCryptoAuthorization]defget(self,request):user=request.public_key.userreturnResponse(request.body)
有关详细信息,请参阅Draft Cavage HTTP Signatures 12
快速启动
安装:
$ pip install drf-keypair-permissions
将keypair_permissions
添加到您的settings.INSTALLED_APPS
:
settings.py
:
INSTALLED_APPS=[...'keypair_permissions',]
迁移数据库
$ ./manage.py makemigrations
$ ./manage.py migrate
包括在您的项目中
{cd6}:
fromkeypair_permissions.permissionsimportHasHttpCryptoAuthorization
将API视图的permission_classes
设置为包括HasHttpCryptoAuthorization
:
classEchoServerApiView(GenericApiView):permission_classes=[HasHttpCryptoAuthorization]defget(self,request):returnResponse(request.body)
或者通过设置REST_FRAMEWORK['DEFAULT_PERMISSION_CLASSES']
在整个API中使用:
REST_FRAMEWORK={'DEFAULT_PERMISSION_CLASSES':['keypair_permissions.permissions.HasHttpCryptoAuthorization',]}
- 项目
标签: