在Web开发中,用户身份验证和后续请求授权是非常重要的安全概念。身份验证是确认用户的身份,而授权是确定用户是否有权限执行特定的操作或访问特定的资源。在前后端分离、单点登录等情景下,我们可以采用不同的方案来实现用户身份验证和后续请求授权。
传统架构 | 前后端分离 | |
---|---|---|
多点登录 | Session 和 Cookie | Token |
单点登录 | Session 和 Cookie + 认证中心 | Token + 认证中心 |
多点登录
Session 和 Cookie 的方式
在传统Web开发中通常采用Session 和 Cookie 的方法,当用户首次进行登录验证成功后,服务器会创建一个会话,并分配一个唯一的会话标识符(Session ID),将该 Session ID 存储在客户端的 Cookie 中,同时在服务器端存储该会话与用户信息的映射关系。之后,用户的每次请求都会携带该 Session ID,服务器通过该 Session ID 查找对应的用户信息,从而验证用户身份。
下面是基于Session 和 Cookie的示例代码
- 前端登陆:用户通过浏览器,在前端页面,使用 fetch API 发起 POST 请求进行用户登录
function userLogin(username, password) {
fetch('/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: username, password: password })
})
.then(response => {
if (response.ok) {
// 登录成功
// 进行后续操作
} else {
// 登录失败
}
})
.catch(error => {
// 异常处理
});
}
- 后端登陆:当用户提交用户名和密码后,后端会检查用户是否存在且密码正确,如果验证通过,在session中写入logged_in=True,并将session_id写入cooke,返回给前端
from flask import Flask, request, session, make_response
app = Flask(__name__)
app.secret_key = 'your_secret_key'
@app.route('/login', methods=['POST'])
def login():
data = request.get_json()