Как работает api_key для стороннего приложения?

В моем проекте я хочу предоставлять данные с помощью API, какой способ лучше для генерации и аутентификации api-ключей. BTW я использую python django.

пробовал django-rest-framework-api-keys, но не сработало.

Я использовал пакет oauth2_provider в Django как для обычной аутентификации пользователей, так и для API. В начале я создал приложение (тип сущности в oauth2_provider) под названием api-key и затем создал токен для этого приложения. У меня есть конечная точка, позволяющая пользователям генерировать API ключ для себя, которая выглядит примерно так:

from oauth2_provider.models import AccessToken, Application
import secrets

@api_view(['post'])
def api_key_add(request):

    user: User = request.user
    try:
        application = Application.objects.get(name='api-key')
        access_token = AccessToken.objects.create(
            user=user,
            application=application,
            expires=timezone.now() + timezone.timedelta(days=365),
            token=secrets.token_urlsafe(64),
        )
        data = {
            'id': access_token.pk,
            'access_token': access_token.token,
            'expires_in': f'{int(access_token.expires.timestamp())}',
        }
        return Response.success(data=data)
    except Application.DoesNotExist:
        return Response.error(
            code='api_key_adding_disabled',
            message=_('Can not add api key because api key feature is disabled.'),
        )
    except Exception as e:
        return Response.error(
            code='can_not_add_api_key', message=_('Can not add api key')
        )

Причина, по которой я создал дополнительное приложение, а не просто использовал стандартное приложение для генерации токенов, заключается в том, что я хотел применить некоторые определенные ограничения на запросы, которые сделаны не с моего сайта и сгенерированы через API-ключ, предоставленный пользователю.

Вернуться на верх