打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
FastAPI 安全机制(二) 基于OAuth2和JWT的Token认证机制(一)生成token
OAuth2PasswordBearer
OAuth2PasswordBearer是接收URL作为参数的一个类:客户端会向该URL发送username和password参数,然后得到一个token值。
OAuth2PasswordBearer并不会创建相应的URL路径操作,只是指明了客户端用来获取token的目标URL。
当请求到来的时候,FastAPI会检查请求的Authorization头信息,如果没有找到Authorization头信息,或者头信息的内容不是Bearer token,它会返回401状态码(UNAUTHORIZED)。
我们需要安装PyJWT来产生和校验JWT token。
pip install pyjwt
我们也需要安装python-multipart,因为OAuth2需要通过表单数据来发送username和password信息。
pip install python-multipart
获取token的代码示例如下:
from datetime import datetime, timedeltafrom typing import Optionalfrom fastapi import Depends, FastAPIfrom fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestFormimport jwtfrom pydantic import BaseModel# to get a string like this run:# openssl rand -hex 32SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"ALGORITHM = "HS256"ACCESS_TOKEN_EXPIRE_MINUTES = 30class Token(BaseModel): access_token: str token_type: strapp = FastAPI()# oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token")语言方法
6304uw0RTA1ABQ
2WIkO在家兼职
77672006-01-19 18:03:38
# 生成tokendef create_access_token(data: dict, expires_delta: Optional[timedelta] = None): to_encode = data.copy() if expires_delta: expire = datetime.utcnow() + expires_delta else: expire = datetime.utcnow() + timedelta(minutes=15) to_encode.update({"exp": expire}) encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM) return encoded_jwt
# 请求接口@app.post("/token", response_model=Token)async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends()): access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES) access_token = create_access_token( data={"sub": "test"}, expires_delta=access_token_expires ) return {"access_token": access_token, "token_type": "bearer"}
我们可以通过postman或者交互式文档来测试这个接口。
如果单纯作为API使用来获取token值,下面这行代码暂时是用不到的:
# oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token")
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
2023年投资思路&django-ninja框架导入
.net core使用jwt自动续期
SAP Spartacus 会使用 Session timeout 吗?
FastAPI官方教程太棒了(下)
JWT究竟是什么呢? | Fundebug博客
Spring Security+OAuth2 + JWT认证以及携带用户信息
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服