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)

这样做需要一个AuthorizationHTTP头,如下所示:

^{pr2}$

此授权头是通过在客户端上使用私钥对请求头进行签名来创建的。然后,服务器通过使用客户机的公钥验证签名来验证该请求是否由已知客户机发送。在

此外,还可以添加一个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',]}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Spring数据JPA+Hibernate在不首先找到父实体的情况下保存子实体   php Java:如何从CLI接收命令   spring为java中的导出数据创建访问文件   java在Windows 8.1上安装Play Framework   java Spring启动白标签错误页面(类型=未找到,状态=404)   java如何在单击时从数组中绘制?   java fn:substringAfter()上次出现   java在IFR语句中使用方法返回   java onPause()或onStop()的名称   对关联对象的关联对象具有条件的java HQL查询   java只打印一次总值,无需迭代   java如何使用抽象Uri buildOn()方法?   如何在Java中执行sudo命令并获得错误输出?   java反射:避免对getConstructor(类<?>…)的未经检查的警告调用作为原始类型类的成员   Java:如何从类中创建的对象调用类方法?   java如何在电子邮件中嵌入图像?   java如何在Android上启用详细GC?   java什么是串行版本id?