使用TokenAuthentication()在Python中实现多用户API访问控制
发布时间:2024-01-01 14:53:15
在Python中,实现多用户API访问控制最常见的方法之一是使用Token认证。TokenAuthentication是Django REST Framework(DRF)的一个认证类,它基于一种令牌机制来验证用户的授权。
以下是一个使用TokenAuthentication实现多用户API访问控制的例子:
首先,确保已安装并设置好Django和Django REST Framework。可以使用以下命令安装它们:
pip install django djangorestframework
接下来,创建一个Django项目和应用程序:
django-admin startproject myapi cd myapi python manage.py startapp myapp
在myapi/settings.py中添加myapp到INSTALLED_APPS:
INSTALLED_APPS = [
...
'myapp',
...
]
然后,在myapi/settings.py中设置REST_FRAMEWORK的默认认证类为TokenAuthentication:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
}
然后,创建一个User模型并执行数据库迁移:
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
python manage.py makemigrations python manage.py migrate
接下来,创建一个Token模型用于存储用户的令牌信息:
from django.db import models
from django.contrib.auth.models import User
class Token(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
token = models.CharField(max_length=255)
def __str__(self):
return self.token
然后,在myapp/views.py中创建一个用于生成和返回用户令牌的视图函数:
from rest_framework import views
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from rest_framework.authtoken.models import Token
class ObtainTokenView(views.APIView):
permission_classes = (AllowAny,)
def post(self, request):
username = request.data.get('username')
password = request.data.get('password')
user = authenticate(username=username, password=password)
if user is None:
return Response({'error': 'Invalid username/password'}, status=400)
token, created = Token.objects.get_or_create(user=user)
return Response({'token': token.key})
最后,在myapi/urls.py中配置URL路由:
from django.urls import path
from myapp.views import ObtainTokenView
urlpatterns = [
path('api/token/', ObtainTokenView.as_view(), name='obtain_token'),
]
现在,你可以启动服务器并使用以下命令测试API:
首先,创建一个新的用户:
python manage.py createsuperuser
然后,执行以下命令获取令牌:
curl -X POST -H "Content-Type: application/json" -d '{"username": "<username>", "password": "<password>"}' http://localhost:8000/api/token/
将<username>和<password>替换为你创建的用户的凭据。
成功执行后,将返回一个令牌。现在,你可以在API请求中使用该令牌来进行身份验证:
curl -H "Authorization: Token <token>" http://localhost:8000/api/protected/
将<token>替换为你收到的令牌。
注意:该示例只处理身份验证,但是在你的应用程序中,你应该添加必要的权限和访问控制来限制特定用户或用户组的访问。
