允许REST API公开的安全方法是什么?

时间:2018-10-05 04:58:10

标签: django-rest-framework

在我的网站上,人们无需登录即可查看REST API提供的图像。我想使一些API不需要用户令牌。因此,我进行了一些研究,并找到了下面的方法。

由于我需要使用这种方式进行生产,因此我想确保这是一种安全的方式。通过API提供的商店仅存储数据,例如名称,URL,描述和图像。他们中的任何一个都与任何用户都不相关。

我可以在生产中使用吗?众所周知,我使用Django REST框架将数据提供给前端,并使用React js在前端显示它们。

from rest_framework.decorators import authentication_classes, permission_classes

@authentication_classes([])
@permission_classes([])
class ListAllStores(APIView):

    def get(self, request, format=None):
        all_stores = Store.objects.all()
        serializer = StoreSerializer(all_stores, many=True)
        return Response(data=serializer.data)

2 个答案:

答案 0 :(得分:0)

您可以尝试在每个请求的标头上发送用户类型的链接。 对于没有令牌的API,请以匿名形式发送userType或类似的内容 对于带有令牌的API,请将userType作为客户或类似的对象发送。

创建一个从每个端点首先调用的方法,并验证Request标头。

如果要使其更通用,可以将此端点和用户类型映射为元数据设置,因此下一次,如果您有某个'/ image'端点,仅允许该用户类型使用,现在您希望它也应该被允许匿名使用,以便可以使用该元数据文件轻松完成而无需更改代码。

答案 1 :(得分:0)

您可以使用AllowAny权限类来明确显示该权限,该类将允许公众访问该端点。

from rest_framework import permissions, views

class ListAllStores(views.APIView):
    permission_classes = (
        permissions.AllowAny,
    )

    def get(self, request, format=None):
        all_stores = Store.objects.all()
        serializer = StoreSerializer(all_stores, many=True)
        return Response(data=serializer.data)