首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Session和JWT (JSON Web Token) 两种不同的身份验证和授权机制详解

Session和JWT (JSON Web Token) 两种不同的身份验证和授权机制详解

作者头像
用户1750537
发布2025-08-29 18:35:35
发布2025-08-29 18:35:35
8800
代码可运行
举报
运行总次数:0
代码可运行

Session和JWT (JSON Web Token) 是两种不同的身份验证和授权机制。

Session

一种基于服务器的身份验证和授权机制。在使用Session时,服务器会为每个用户创建一个唯一的Session ID,并将该ID存储在服务器端的存储介质中(如内存、数据库等)。当用户进行身份验证后,服务器会将Session ID发送给用户,用户在后续的请求中需要携带该Session ID,供服务器进行身份验证和授权。

JWT

一种基于令牌(Token)的身份验证和授权机制。在使用JWT时,服务器会颁发一个令牌(Token)给用户,该令牌包含了用户的身份信息和其他相关的元数据。用户在后续的请求中需要携带该令牌,供服务器进行身份验证和授权。JWT是基于JSON格式的,通常由三部分组成:头部(Header)、负载(Payload)和签名(Signature)。头部包含了令牌的类型和加密算法信息,负载包含了用户的身份信息,签名用于验证令牌的真实性和完整性。

两者的主要区别在于数据存储方式和验证方式的不同。Session需要服务器端存储Session数据,并通过Session ID进行验证;而JWT是通过令牌进行验证,不需要在服务器端存储任何数据。这使得JWT在分布式系统和跨域场景下更具优势,因为令牌可以在不同的服务器之间传递和验证。

代码:

使用Session进行身份验证和授权的示例:

代码语言:javascript
代码运行次数:0
运行
复制
# 服务器端
from flask import Flask, request, session

app = Flask(__name__)
app.secret_key = 'secret-key'  # 设置Session加密密钥

@app.route('/login', methods=['POST'])
def login():
    # 根据用户名和密码进行身份验证
    username = request.form['username']
    password = request.form['password']
    if verify_credentials(username, password):
        session['username'] = username  # 将用户名保存在Session中
        return 'Login successful'
    else:
        return 'Invalid credentials'

@app.route('/protected', methods=['GET'])
def protected():
    if 'username' in session:
        return 'Protected resource'
    else:
        return 'Unauthorized'

if __name__ == '__main__':
    app.run()

# 客户端
import requests

# 登录
response = requests.post('http://localhost:5000/login', data={'username': 'admin', 'password': 'pass'})
print(response.text)

# 访问受保护资源
response = requests.get('http://localhost:5000/protected')
print(response.text)

使用JWT进行身份验证和授权的示例:

代码语言:javascript
代码运行次数:0
运行
复制
# 服务器端
from flask import Flask, request
import jwt

app = Flask(__name__)
app.secret_key = 'secret-key'  # 设置JWT加密密钥

@app.route('/login', methods=['POST'])
def login():
    # 根据用户名和密码进行身份验证
    username = request.form['username']
    password = request.form['password']
    if verify_credentials(username, password):
        token = jwt.encode({'username': username}, app.secret_key, algorithm='HS256')
        return token
    else:
        return 'Invalid credentials'

@app.route('/protected', methods=['GET'])
def protected():
    token = request.headers.get('Authorization').split()[1]  # 从请求头中获取令牌
    try:
        decoded_token = jwt.decode(token, app.secret_key, algorithms='HS256')
        return 'Protected resource'
    except jwt.exceptions.DecodeError:
        return 'Invalid token'

if __name__ == '__main__':
    app.run()

# 客户端
import requests

# 登录
response = requests.post('http://localhost:5000/login', data={'username': 'admin', 'password': 'pass'})
token = response.text

# 访问受保护资源
headers = {'Authorization': f'Bearer {token}'}
response = requests.get('http://localhost:5000/protected', headers=headers)
print(response.text)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Session和JWT (JSON Web Token) 是两种不同的身份验证和授权机制。
  • Session
  • JWT
  • 代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档