FastAPI: Security(14)

安全,权限对于任何一个系统是不可避免的。

FastAPI提供了多种工具,可帮助你以标准的方式轻松、快速地处理安全性,而无需研究和学习所有的安全规范。

1
2
3
4
5
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@app.get('/users/')
def users(token: str = Depends(oauth2_scheme)):
return {'token': token}

简单 Bear OAuth2实现完整流程

在FastAPI中, 提供了多种认证解决方案工具, 其中也包括了OAuth2, 可以使用OAuth2PasswordBearer类来实现OAuth2的功能, 使用的是OAuth2中的一种认证方案, 通过bearer token来携带token, 具体做法就是:

在请求头中添加参数Authorization, 其值为Bearertoken中间使用空格连接形成的字符串, 如Bearer your_token_string, 注意, AuthorizationBearer都是规范中固定的写法, 不可修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
fake_user = {
'admin':{
'username': 'admin',
'hash_password': 'fakehashadmin',
'enabled': True
}
}

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")# 这个参数的作用是当输入完用户密码后, 点击Authorize按钮后, 会请求127.0.0.1:8000/token这个网址, 把用户密码通过Form表单的形式传递给这个请求, 即这个/token就是我们网站的后台登录接口.


def fake_hash_password(password: str):
return "fakehash" + password

class User(BaseModel):
username: str
enbaled: Optional[bool] = None

class UserPwd(User):
hash_password: str


@app.post('/login')
def login(form: OAuth2PasswordRequestForm = Depends()):
user = fake_user.get(form.username)
if not user:
raise HTTPException(status_code=400, detail='user incorrect')
u = UserPwd(**user)
hashpwd = fake_hash_password(form.password)
if hashpwd != u.hash_password:
raise HTTPException(status_code=400, detail='passwod incorrect')

return {"access_token": u.username, "token_type": "bearer"}

唐胡璐 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
分享创造价值,您的支持将鼓励我继续前行!