Ric*_*ard 3 authentication django django-rest-framework
我正在使用优秀的django-rest框架在Django 1.8中工作.我有一个公共的RESTful API.
我现在想开始要求key使用此API 的GET参数,并禁止任何没有此参数的请求.我会根据请求手动为用户分配密钥.
我已阅读DRF身份验证文档,但我不确定是否有任何符合我用例的内容.我发现这很奇怪,因为我的用例必须非常普遍.
基于令牌的身份验证要求用户设置HTTP标头.我的典型API用户并不复杂(将要下载CSV的Excel用户),所以我认为我不能让他们这样做.
我认为Basic-Auth是我需要的,但我宁愿提供一个简单的基于URL的密钥而不是Django用户名和密码(我的应用程序现在没有用户的概念).
实现这个的最佳方法是什么?
创建一个表,其中包含您向某人发出的所有密钥.
例:
class RestApiKey(models.Model):
api_key = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
接下来创建一个自定义Permision类,它将在将请求转发给视图之前检查url中的api Key,如:
from rest_framework import permissions
from yourappname.models import RestApiKey
class OnlyAPIPermission(permissions.BasePermission):
def has_permission(self, request, view):
try:
api_key = request.QUERY_PARAMS.get('apikey', False)
RestApiKey.objects.get(api_key=api_key)
return True
except:
return False
Run Code Online (Sandbox Code Playgroud)
所以请求网址必须像http://yourdomain.com/?apikey=sgvwregwrgwg
在您的视图中添加权限类:
class YourViewSet(generics.ListAPIView):
permission_classes = (OnlyAPIPermission,)
Run Code Online (Sandbox Code Playgroud)
或者如果您使用的是基于功能的视图,那么请执
@permission_classes((OnlyAPIPermission, ))
def example_view(request, format=None):
. . .
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
730 次 |
| 最近记录: |