Какой безопасный способ сделать API-интерфейсы REST общедоступными? - PullRequest
0 голосов
/ 05 октября 2018

На моем сайте люди могут видеть изображения, полученные из REST API, без входа в систему.Я хочу, чтобы некоторые из моих API не требовали токена пользователя.Итак, у меня было небольшое исследование, и я нашел путь ниже.

Поскольку мне нужно использовать этот способ для производства, я хочу убедиться, что это безопасный способ.Хранилища, которые будут предоставлены через API, содержат только данные, такие как имя, URL, описание и изображения.Ни один из них не имеет отношения к каким-либо пользователям.

Можно ли использовать в производстве?Как вы знаете, я использую Django REST Framework для обслуживания данных в веб-интерфейсе и использую 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 голосов
/ 05 октября 2018

Вы можете быть явным, используя 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)
0 голосов
/ 05 октября 2018

Вы можете попробовать что-нибудь, отправив ссылку на тип пользователя в заголовке каждого запроса.А для API без токена отправьте userType как анонимный или что-то в этом роде И для API с токеном отправьте userType как клиент или что-то в этом роде.

Создайте метод, который будет вызываться первым из каждой конечной точки ипроверьте заголовок запроса.

Если вы хотите сделать его более общим, вы можете сопоставить эту конечную точку и тип пользователя как настройку метаданных, поэтому в следующий раз, если у вас есть какая-то конечная точка '/ image', которая была разрешенатолько для пользовательского типа пользователя, но теперь вы хотите, чтобы его также можно было разрешить в любое время, чтобы это можно было легко сделать с помощью этого файла метаданных без изменения кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...