Token认证
- 原理:客户端向服务器发送用户名和密码进行认证,服务器验证通过后生成一个Token(通常是加密字符串)返回给客户端。客户端后续请求都携带此Token,服务器通过验证Token来确认用户身份。
- 在Flask中的实现:
from flask import Flask
from flask_httpauth import HTTPTokenAuth
app = Flask(__name__)
auth = HTTPTokenAuth(scheme='Bearer')
tokens = {
"valid_token": "user1"
}
@auth.verify_token
def verify_token(token):
return token in tokens
@app.route('/protected')
@auth.login_required
def protected():
return "This is a protected route"
if __name__ == '__main__':
app.run(debug=True)
- 在Django中的实现:
- 可以使用
djangorestframework
库。
- 配置
settings.py
:
INSTALLED_APPS = [
...
'rest_framework',
...
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
)
}
- 生成Token:在
models.py
中,Token
模型已经由rest_framework
提供,通过manage.py
命令python manage.py drf_create_token
为用户生成Token,或者在代码中使用Token.objects.create(user=user)
。客户端在请求头中携带Authorization: Token <token>
。
基本认证
- 原理:客户端在请求头中发送包含用户名和密码的Base64编码字符串。服务器接收到请求后,解码字符串并验证用户名和密码。
- 在Flask中的实现:
from flask import Flask
from flask_httpauth import HTTPBasicAuth
app = Flask(__name__)
auth = HTTPBasicAuth()
users = {
"user1": "password1"
}
@auth.verify_password
def verify_password(username, password):
if username in users and users[username] == password:
return True
return False
@app.route('/protected')
@auth.login_required
def protected():
return "This is a protected route"
if __name__ == '__main__':
app.run(debug=True)
- 在Django中的实现:
- 同样可以使用
djangorestframework
库。
- 配置
settings.py
:
INSTALLED_APPS = [
...
'rest_framework',
...
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
)
}
- 客户端在请求头中携带
Authorization: Basic <base64编码的用户名:密码>
。