Как работает 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-ключ, предоставленный пользователю.