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")
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。