Django Rest框架系统,用于检查自定义HTTP头(应用程序-令牌)
我使用Django和Django-rest框架。 我必须为我的许多视图检查自定义http头 对于每个视图,我需要:Django Rest框架系统,用于检查自定义HTTP头(应用程序-令牌),django,authentication,django-rest-framework,permissions,authorization,Django,Authentication,Django Rest Framework,Permissions,Authorization,我使用Django和Django-rest框架。 我必须为我的许多视图检查自定义http头 对于每个视图,我需要: 检查http自定义头是否存在(X-APP-TOKEN) 检查此令牌是否正确 为请求提供服务或返回HTTP错误(例如403) 有什么方法我可以遵循吗? 例如,类似rest框架视图的permissions\u类。 我尝试实现如下自定义权限: class IsAuthorizedApplication(BasePermission): def has_permission(self
- 检查http自定义头是否存在(X-APP-TOKEN)李>
- 检查此令牌是否正确李>
- 为请求提供服务或返回HTTP错误(例如403)李>
class IsAuthorizedApplication(BasePermission):
def has_permission(self, request, view):
app_id = request.META.get(app_settings.APPS_HEADER_AUTHORIZATION_APP_ID)
secret_token = request.META.get(app_settings.APPS_HEADER_AUTHORIZATION_APP_TOKEN)
if app_id and secret_token:
try:
selected_app = Application.objects.get(app_uuid=app_id, status=ApplicationStatusType.ACTIVE)
// Check secret token
return True
except Application.DoesNotExist:
return False
return False
但是我认为这种方法是基于djnagorest框架的身份验证系统的。在我收到“虚假申报”的情况下生效:
401 - {"detail":"Authentication credentials were not provided."}
是否有一些不同的方法来检查自定义http头(如permission类),或者我必须先编写一个基本视图来检查应用程序令牌,然后再为请求提供服务?这似乎是django auth BR返回的响应,因为您在头中有pass auth token,因为上面的权限代码看起来不错。它应该返回403
请检查djnago restframework的默认设置
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]
}
If not specified, this setting defaults to allowing unrestricted access:
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
]
你可以用这个
使用pip安装最新版本:
pip安装djangorestframework api密钥
#settings.py
已安装的应用程序=[
# ...
“rest_框架”,
“rest\u框架\u api\u密钥”,
]
确保“rest\u framework\u api\u key”位于“rest\u framework”之后,
运行包括的迁移:
python manage.py迁移
然后从管理员创建新密钥
现在
HasAPIKey权限类保护API密钥授权后的视图
您可以全局设置权限:
#settings.py
REST_框架={
“默认权限类”:[
“rest\u框架\u api\u key.permissions.HasAPIKey”,
]
}
或基于每个视图:
#views.py
从rest_framework.views导入APIView
从rest\u framework\u api\u key.permissions导入HasAPIKey
类UserListView(APIView):
权限\u类=[HasAPIKey]
# ...
认证头
默认情况下,客户端必须通过授权标头传递其API密钥。其格式必须如下所示:
其中,*******表示生成的API密钥
或者你可以这样做
例如,如果设置:
# settings.py
API_KEY_CUSTOM_HEADER = "X-APP-TOKEN"
然后,客户端必须使用以下方式发出授权请求:
X-APP-TOKEN:*********此链接很好
# settings.py
API_KEY_CUSTOM_HEADER = "X-APP-TOKEN"