想知道 Python用fastapi加jwt认证怎么实习单点登录啊,自己看了很多文章还是不懂 有没有健全的文章啊加上完整代码的
1条回答 默认 最新
关注 【以下回答由 GPT 生成】
解决方案
实现单点登录(Single Sign-On, SSO)可以使用FastAPI和JWT来完成。以下是一个用FastAPI和JWT实现单点登录的示例代码:
# 安装所需的库 # pip install fastapi[all] pyjwt from fastapi import FastAPI, HTTPException, Depends from fastapi.security import OAuth2PasswordRequestForm, OAuth2PasswordBearer from datetime import datetime, timedelta from jwt import PyJWTError, encode, decode # 配置参数 JWT_SECRET = "secret" JWT_ALGORITHM = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES = 30 # 假设的用户数据库 USERS = { "user1": { "password": "pass1", "name": "User One" }, "user2": { "password": "pass2", "name": "User Two" } } # 创建FastAPI实例 app = FastAPI() # 创建JWT工具函数 def create_access_token(data: dict, expires_delta: timedelta): to_encode = data.copy() expire = datetime.utcnow() + expires_delta to_encode.update({"exp": expire}) encoded_jwt = encode(to_encode, JWT_SECRET, algorithm=JWT_ALGORITHM) return encoded_jwt def decode_access_token(token: str): try: payload = decode(token, JWT_SECRET, algorithms=[JWT_ALGORITHM]) username: str = payload.get("sub") if username is None: raise HTTPException(status_code=400, detail="Invalid token") return username except PyJWTError: raise HTTPException(status_code=401, detail="Invalid token") # JWT依赖项 oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") # 定义登录路由 @app.post("/token") def login(form_data: OAuth2PasswordRequestForm = Depends()): username = form_data.username password = form_data.password if username not in USERS or USERS[username]["password"] != password: raise HTTPException(status_code=400, detail="Incorrect username or password") access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES) access_token = create_access_token( data={"sub": username}, expires_delta=access_token_expires ) return {"access_token": access_token, "token_type": "bearer"} # 定义需要登录的路由 @app.get("/protected_route") def protected_route(token: str = Depends(oauth2_scheme)): username = decode_access_token(token) user_data = USERS[username] return {"message": f"Hello, {user_data['name']}!"}
这个示例代码中包含了一个登录路由(
/token
)和一个需要登录才能访问的保护路由(/protected_route
)。用户可以通过发送POST请求到登录路由
/token
来获取访问令牌(access_token),该令牌在后续请求中用于验证用户身份。登录路由使用OAuth2PasswordRequestForm类来获取表单数据。保护路由(
/protected_route
)需要使用用户的访问令牌来验证用户身份。访问令牌通过Depends(oauth2_scheme)
参数传递给路由函数,并使用decode_access_token
函数来验证令牌并获取用户名。以上代码仅是一个示例,你可以根据自己的需求进行修改和扩展。
希望这个示例能帮助你更好地理解和实现单点登录功能。如果你有任何问题,请随时向我提问。
【相关推荐】
- 这篇文章:python:Fastapi - 基于jwt生成token和密码加密 也许有你想要的答案,你可以看看
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 虚拟机检测,可以是封装好的DLL,可付费
- ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)
- ¥15 开发一个类似百度网盘的软件,在主页 文件列表点击进入文件夹,在文件夹里面还有文件夹,代码该怎么写?
- ¥30 使用matlab将观测点聚合成多条目标轨迹
- ¥15 Workbench中材料库无法更新,如何解决?
- ¥20 如何推断此服务器配置
- ¥15 关于github的项目怎么在pycharm上面运行
- ¥15 内存地址视频流转RTMP
- ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
- ¥15 有没有整苹果智能分拣线上图像数据