FastAPI安全系列(一) OAuth2 .0授权模式基础
2021-06-11 00:02
标签:png 凭证 lazy Owner 三种模式 import 路径 pre 定义 OAuth2 .0模式有四种分别是: 这里探讨的是第三种模式密码授权模式(Resource Owner Password Credential Grant),这种模式的流程: FastAPI中使用OAuth2来看一下它是如何使用工作的,然后来理解发生了什么。 访问 http://127.0.0.1:8000/docs#/ 在路径操作的右上角有一个可以点击的锁,如果你点击它,你会得到一个由username和password(以及其它的可选字段)的认证的表单。 现在理解一下这个流程: FastAPI在不同的抽象级别提供了几个工具,用来实现这些安全特性。 当我们通过OAuth2PasswordBearer类来创建一个实例,并且通过tokenUrl参数传递一个URL,客户端将会将username和password传递到这个URL对应的路径操作函数中,然后得到一个token。 此处的tokenUrl="token"是相对路径,相当于tokenUrl="./token"。 oauth2_schemes实例变量是可调用的,这就意味着它可以作为依赖项。所以在路径操作函数中: 这个依赖项提供一个str用来标记路径操作函数的token参数。FastAPI知道它可以使用这个依赖在OpenAPI中来定义一个“安全模式”(以及自动交互的API文档)。 上述基于安全系统向路径操作函数提供了一个str类型的token,但这并不是很实用,实际上可以使它返回当前的用户信息。 此时可以将oauth2_scheme 作为get_current_user的依赖项,然后将get_current_user作为路径操作函数的依赖项。 FastAPI安全系列(一) OAuth2 .0授权模式基础 标签:png 凭证 lazy Owner 三种模式 import 路径 pre 定义 原文地址:https://www.cnblogs.com/shenjianping/p/14866577.html一、介绍
from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.get("/items/")
async def read_items(token: str = Depends(oauth2_scheme)):
return {"token": token}
二、
OAuth2PasswordBearer
1、参数说明
...
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
...
...
@app.get("/items/")
async def read_items(token: str = Depends(oauth2_scheme)):
return {"token": token}
...
2、获取当前用户
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
username: str
email: Optional[str] = None
full_name: Optional[str] = None
disabled: Optional[bool] = None
...
async def get_current_user(token: str = Depends(oauth2_scheme)):
pass
@app.get("/users/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
return current_user
...
...
def fake_decode_token(token):
return User(
username=token + "fakedecoded", email="john@example.com", full_name="John Doe"
)
async def get_current_user(token: str = Depends(oauth2_scheme)):
user = fake_decode_token(token)
return user
...
...
@app.get("/users/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
return current_user
...
3、完整代码
from typing import Optional
from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer
from pydantic import BaseModel
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
class User(BaseModel):
username: str
email: Optional[str] = None
full_name: Optional[str] = None
disabled: Optional[bool] = None
def fake_decode_token(token):
return User(
username=token + "fakedecoded", email="john@example.com", full_name="John Doe"
)
async def get_current_user(token: str = Depends(oauth2_scheme)):
user = fake_decode_token(token)
return user
@app.get("/users/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
return current_user
文章标题:FastAPI安全系列(一) OAuth2 .0授权模式基础
文章链接:http://soscw.com/essay/93348.html