网站首页 > java教程 正文
前面2篇文章,钢铁老豆和大家讨论了JWT、Redis缓存会话ID的对比,以及单点登录(SSO)的主流方案,那么我们这节就来讲讲在Python主流的Web服务器框架下,比如Django、Flask、FastAPI,如何才能通过JWT实现单点登录。
什么是JWT?
JSON Web Tokens(JWT)是一种开放标准(RFC 7519),提供了一种简洁(对于URL安全)、自包含的方法,用于在各方之间以JSON对象的形式安全地传输信息。每个JWT包含了加密的信息,可以验证发送方的身份和声明的真实性。JWT主要由三部分组成:
- Header(头部):通常包含了令牌的类型(即JWT)和所使用的加密算法,如HMAC SHA256或RSA。
- Payload(负载):存放有效信息的地方。这些信息包括但不限于用户身份信息、令牌的发行者、过期时间等。负载中的声明可以是公共的、私有的,也可以是注册的。
- Signature(签名):为了防止信息被篡改,会对前两部分进行签名。如果使用的是HMAC算法,那么还需要一个密钥。
JWT实现单点登录SSO的步骤
在单点登录系统中,JWT扮演了极其关键的角色。通过JWT,用户在一个系统中的登录信息可以被其他所有系统所信任,从而实现一次登录,多个系统通行的效果。这不仅大幅提升了用户体验,还提高了安全性,因为JWT的传输是加密的,能有效防止信息被篡改。
首先,我们先讲讲实现大致的步骤:
- 身份验证服务器的设置:首先需要一个中心身份验证服务器,这个服务器负责用户的登录认证并生成JWT。
- 登录过程:用户首次访问任一应用时,会被重定向到认证服务器进行登录。成功登录后,服务器会生成一个包含用户信息的JWT。
- 使用JWT访问其他应用:用户随后访问其他应用时,只需提供JWT即可。每个应用都会对JWT进行验证,确认用户身份后,无需再次登录,即可访问服务。
Django、Flask、FastAPI里有关于JWT或者SSO的API吗?
在Django、Flask和FastAPI这三个流行的Python web框架中,都可以实现JWT或SSO的功能,但它们本身不直接包含JWT或SSO的API。通常,你需要使用第三方库来集成这些功能。下面钢铁老豆就分别介绍每个框架常用的一些库和实现方式:
Django
对于JWT认证,有一个流行库叫djangorestframework-simplejwt。这个库与Django REST Framework一起工作,提供了全面的JWT支持。
# 安装方式
pip install djangorestframework-simplejwt
# 快速示例
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from django.urls import path
urlpatterns = [
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]
对于SSO,django-allauth则是一个提供社交账号认证的解决方案,它支持通过多种第三方服务(如Google、Facebook等)实现单点登录。
# 安装方式
pip install django-allauth
Flask
对于JWT认证,flask-jwt-extended是实现JWT认证的主流选择之一。它提供了许多有用的功能,如创建和验证JWTs、设置令牌的过期时间等。
# 安装方式
pip install flask-jwt-extended
# 快速示例
from flask import Flask
from flask_jwt_extended import JWTManager
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret' # Change this!
jwt = JWTManager(app)
对于SSO,Flask没有一个统一的标准库,但你可以使用authlib库来集成OAuth 2.0支持,实现与各种社交平台的连接。
# 安装方式
pip install authlib
FastAPI
钢铁老豆以前使用的Flask部署服务,不过现在已经改用FastAPI这个基于协程的异步服务器老六,性能比Flask快不是一星半点。虽然一般内部的模型服务,不需要使用特别的身份认证,但公司或者业务大了,还是需要的。
对于JWT认证,我们可以通过fastapi-jwt-auth来实现。这个库提供了FastAPI专用的JWT支持。
# 安装方式
pip install fastapi-jwt-auth
# 快速示例
from fastapi import FastAPI, Depends
from fastapi_jwt_auth import AuthJWT
app = FastAPI()
@AuthJWT.load_config
def get_config():
return {'authjwt_secret_key': 'secret'}
@app.post('/login')
def login(authorize: AuthJWT = Depends()):
authorize.create_access_token(subject='user_id')
return {"access_token": authorize.get_raw_jwt()}
对于SSO,你可以使用authlib库与FastAPI一起使用,它也支持OAuth和JWT的功能。
无论你选择什么服务器框架,通常都需要将这些库与其他用户认证和授权逻辑相集成,以实现完整的安全系统。根据项目的具体需求和已有的技术栈,选择合适的库和框架非常关键。
欢迎点赞+收藏+评论+关注,每天学习一点Python小知识,无论基础、模块、数据分析、深度学习和Ai,总有你感兴趣的。另外,想咨询转行IT和算法入门的朋友,欢迎关注后私聊。我是钢铁老豆,一个30岁转行IT、自学成为算法工程师、想用Ai点亮孩子小小世界的Pythoner。
- 上一篇: 4000字长文,带你了解单点登录
- 下一篇: 单点登陆常用的方式Oauth认证登录
猜你喜欢
- 2024-11-20 后端开发之多应用之间单点登录
- 2024-11-20 单点登陆常用的方式Oauth认证登录
- 2024-11-20 4000字长文,带你了解单点登录
- 2024-11-20 SSO单点登录(三种实现方式)
- 2024-11-20 一次登录、便捷访问所有?聊聊CAS单点登录是如何实现的
- 2024-11-20 SpringBoot集成xxl-sso实现单点登录
- 2024-11-20 连环画解析“单点登录”原理,保证你能看懂
- 2024-11-20 CAS 单点登录简介
- 2024-11-20 springboot 集成cas5.3 实现sso单点登录
- 2024-11-20 ASP.NET中的单点登录
你 发表评论:
欢迎- 最近发表
-
- Java内存溢出紧急处理:10个必知的Linux命令快速定位OOM
- 面试常问的 25+ 个 Linux 命令(linux面试命令大全)
- Java堆外内存溢出紧急处理实战:Linux命令定位与Spring Boot解决
- java开发常用的Linux命令,高频的没你想象的多
- Java 应用 CPU 飙升?8 个 Linux 命令组合拳快速锁定异常线程
- Java 开发者线上问题排查常用的 15 个 Linux 命令
- Java程序员必备的Linux命令:让你的工作效率翻倍
- Java程序员必备的Linux命令全解析
- [超全整理] Java 程序员必备的 100 条 Linux 命令大全
- SAP ABAP资源导航(sap aatp)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)