๐โโ - ๐ฅ ๐¶
โก๏ธ ๐ ๐ ๐ โ๏ธ ๐ ๐ฉโ๐ป ๐ ๏ธ ๐.
& ๐ โ๏ธ ๐ธ โ1๏ธโฃ ๐ โ๏ธ ๐ โก ๐ ๐ (โ๏ธ ๐ฑ ๐ธ).
& ๐ ๐ โ๏ธ ๐ ๐ธ ๐ โฎ๏ธ ๐ฉโ๐ป, โ๏ธ ๐ & ๐.
๐ฅ ๐ช โ๏ธ Oauth2๏ธโฃ ๐ ๐ โฎ๏ธ FastAPI.
โ๏ธ โก๏ธ ๐ ๐ ๐ฐ ๐ ๐ ๐ ๐ง ๐ ๐ ๐ฅ ๐ โน ๐ ๐ช.
โก๏ธ โ๏ธ ๐งฐ ๐ FastAPI ๐ต ๐โโ.
โ โซ๏ธ ๐¶
โก๏ธ ๐ฅ โ๏ธ ๐ & ๐ โ โซ๏ธ ๐ท, & โคด๏ธ ๐ฅ ๐ ๐ ๐ ๐ค โซ๏ธโ ๐ฅ.
โ main.py¶
๐ ๐ผ ๐ main.py:
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}
๐ โซ๏ธ¶
Info
๐ฅ โ python-multipart.
๐คถ โ. pip install python-multipart.
๐ โฉ๏ธ Oauth2๏ธโฃ โ๏ธ "๐จ ๐" ๐จ username & password.
๐ ๐ผ โฎ๏ธ:
$ uvicorn main:app --reload
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
โ โซ๏ธ¶
๐ถ ๐ ๐ฉบ: http://127.0.0.1:8000/docs.
๐ ๐ ๐ ๐ณ ๐ ๐:

โ ๐ผ โ
๐ โช โ๏ธ โจ ๐ "โ" ๐ผ.
& ๐ โก ๐ ๏ธ โ๏ธ ๐ฅ ๐ ๐-โถ๏ธ๏ธ โฉ ๐ ๐ ๐ช ๐.
& ๐ฅ ๐ ๐ โซ๏ธ, ๐ โ๏ธ ๐ฅ โ ๐จ ๐ username & password (& ๐ ๐ฆ ๐):

Note
โซ๏ธ ๐ซ ๐ค โซ๏ธโ ๐ ๐ ๐จ, โซ๏ธ ๐ ๐ซ ๐ท. โ๏ธ ๐ฅ ๐ ๐ค ๐ค.
๐ โ๏ธ ๐ซ ๐ธ ๐ ๐ฉโ๐ป, โ๏ธ โซ๏ธ ๐ ๐ง ๐งฐ ๐ ๐ฅ ๐ ๐ ๐ ๏ธ.
โซ๏ธ ๐ช โ๏ธ ๐ธ ๐ (๐ ๐ช ๐).
โซ๏ธ ๐ช โ๏ธ ๐ฅ ๐ฅณ ๐ธ & โ๏ธ.
& โซ๏ธ ๐ช โ๏ธ ๐, โน, โ & ๐ฏ ๐ ๐ธ.
password ๐ง¶
๐ โก๏ธ ๐ถ ๐ ๐ & ๐ค โซ๏ธโ ๐ ๐.
password "๐ง" 1๏ธโฃ ๐ ("๐ง") ๐ฌ Oauth2๏ธโฃ, ๐ต ๐โโ & ๐ค.
Oauth2๏ธโฃ ๐ง ๐ ๐ฉโ๐ป โ๏ธ ๐ ๏ธ ๐ช ๐ฌ ๐ฝ ๐ ๐ ๐ฉโ๐ป.
โ๏ธ ๐ ๐ผ, ๐ FastAPI ๐ธ ๐ ๐ต ๐ ๏ธ & ๐ค.
, โก๏ธ ๐ โซ๏ธ โช๏ธโก๏ธ ๐ ๐ โ ๐:
- ๐ฉโ๐ป ๐
username&password๐ธ, & ๐ฏEnter. - ๐ธ (๐โโ ๐ฉโ๐ป ๐ฅ) ๐จ ๐
username&password๐ฏ ๐ ๐ ๐ ๏ธ (๐ฃ โฎ๏ธtokenUrl="token"). - ๐ ๏ธ โ
๐
username&password, & ๐จ โฎ๏ธ "๐ค" (๐ฅ ๐ซ ๐ ๏ธ ๐ ๐).- "๐ค" ๐ป โฎ๏ธ ๐ ๐ ๐ฅ ๐ช โ๏ธ โช โ ๐ ๐ฉโ๐ป.
- ๐, ๐ค โ ๐ โฎ๏ธ ๐ฐ.
- , ๐ฉโ๐ป ๐ โ๏ธ ๐น ๐ โ โช.
- & ๐ฅ ๐ค ๐, โ ๐. โซ๏ธ ๐ซ ๐ ๐งฒ ๐ ๐ ๐ ๐ท โพ (๐ ๐ผ).
- ๐ธ ๐ช ๐ ๐ค ๐ ๐ฑ.
- ๐ฉโ๐ป ๐ ๐ธ ๐ถ โ1๏ธโฃ ๐ ๐ธ ๐ธ ๐ฑ.
- ๐ธ ๐ช โ ๐
๐ฝ โช๏ธโก๏ธ ๐ ๏ธ.
- โ๏ธ โซ๏ธ ๐ช ๐ค ๐ ๐ฏ ๐.
- , ๐ โฎ๏ธ ๐ ๐ ๏ธ, โซ๏ธ ๐จ ๐
Authorizationโฎ๏ธ ๐ฒBearerโ ๐ค. - ๐ฅ ๐ค ๐
foobar, ๐Authorization๐ ๐:Bearer foobar.
FastAPI'โ OAuth2PasswordBearer¶
FastAPI ๐ ๐ ๐งฐ, ๐ ๐ โ, ๐ ๏ธ ๐ซ ๐โโ โ.
๐ ๐ผ ๐ฅ ๐ โ๏ธ Oauth2๏ธโฃ, โฎ๏ธ ๐ ๐ง, โ๏ธ ๐จ ๐ค. ๐ฅ ๐ โ๏ธ OAuth2PasswordBearer ๐.
Info
"๐จ" ๐ค ๐ซ ๐ด ๐.
โ๏ธ โซ๏ธ ๐ 1๏ธโฃ ๐ โ๏ธ ๐ผ.
& โซ๏ธ ๐ช ๐ ๐ โ๏ธ ๐ผ, ๐ฅ ๐ Oauth2๏ธโฃ ๐ด & ๐ญ โซ๏ธโ โซ๏ธโ ๐ค โ1๏ธโฃ ๐ ๐ โฃ ๐ป ๐ ๐ช.
๐ ๐ผ, FastAPI ๐ ๐ โฎ๏ธ ๐งฐ ๐ โซ๏ธ.
๐โ ๐ฅ โ ๐ OAuth2PasswordBearer ๐ ๐ฅ ๐ถโโ๏ธ tokenUrl ๐ข. ๐ ๐ข ๐ ๐ ๐ ๐ฉโ๐ป (๐ธ ๐ ๐ฉโ๐ป ๐ฅ) ๐ โ๏ธ ๐จ username & password โ ๐ค ๐ค.
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}
Tip
๐ฅ tokenUrl="token" ๐ โ ๐ token ๐ ๐ฅ ๐ซ โ. โซ๏ธ โ ๐, โซ๏ธ ๐ ./token.
โฉ๏ธ ๐ฅ โ๏ธ โ ๐, ๐ฅ ๐ ๐ ๏ธ ๐ https://example.com/, โคด๏ธ โซ๏ธ ๐ ๐ https://example.com/token. โ๏ธ ๐ฅ ๐ ๐ ๏ธ ๐ https://example.com/api/v1/, โคด๏ธ โซ๏ธ ๐ ๐ https://example.com/api/v1/token.
โ๏ธ โ ๐ โ โ ๐ญ ๐ ๐ธ ๐ง ๐ท ๐ง โ๏ธ ๐ผ ๐ โ ๐ณ.
๐ ๐ข ๐ซ โ ๐ ๐ / โก ๐ ๏ธ, โ๏ธ ๐ฃ ๐ ๐ /token ๐ 1๏ธโฃ ๐ ๐ฉโ๐ป ๐ โ๏ธ ๐ค ๐ค. ๐ โน โ๏ธ ๐, & โคด๏ธ ๐ ๐ ๏ธ ๐งพ โ๏ธ.
๐ฅ ๐ ๐ โ โ โก ๐ ๏ธ.
Info
๐ฅ ๐ ๐ถ โ "โ" ๐ ๐ช ๐ ๐ ๐ข ๐ tokenUrl โฉ๏ธ token_url.
๐ โฉ๏ธ โซ๏ธ โ๏ธ ๐ ๐ ๐ ๐. ๐ ๐ฅ ๐ ๐ช ๐ฌ ๐ ๐ ๐ ๐ซ ๐โโ โ ๐ ๐ช ๐ & ๐ โซ๏ธ ๐ ๐ โน ๐ โซ๏ธ.
oauth2_scheme ๐ข ๐ OAuth2PasswordBearer, โ๏ธ โซ๏ธ "๐ง๐ฒ".
โซ๏ธ ๐ช ๐ค:
oauth2_scheme(some, parameters)
, โซ๏ธ ๐ช โ๏ธ โฎ๏ธ Depends.
โ๏ธ โซ๏ธ¶
๐ ๐ ๐ช ๐ถโโ๏ธ ๐ oauth2_scheme ๐ โฎ๏ธ Depends.
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}
๐ ๐ ๐ ๐ str ๐ ๐ ๏ธ ๐ข token โก ๐ ๏ธ ๐ข.
FastAPI ๐ ๐ญ ๐ โซ๏ธ ๐ช โ๏ธ ๐ ๐ ๐ฌ "๐โโ โ" ๐ ๐ (& ๐ง ๐ ๏ธ ๐ฉบ).
๐ก โน
FastAPI ๐ ๐ญ ๐ โซ๏ธ ๐ช โ๏ธ ๐ OAuth2PasswordBearer (๐ฃ ๐) ๐ฌ ๐โโ โ ๐ โฉ๏ธ โซ๏ธ ๐ โช๏ธโก๏ธ fastapi.security.oauth2.OAuth2, โ ๐ ๐ โช๏ธโก๏ธ fastapi.security.base.SecurityBase.
๐ ๐โโ ๐ ๐ ๐ ๏ธ โฎ๏ธ ๐ (& ๐ง ๐ ๏ธ ๐ฉบ) ๐ โช๏ธโก๏ธ SecurityBase, ๐ โ FastAPI ๐ช ๐ญ โ ๐ ๏ธ ๐ซ ๐.
โซ๏ธโ โซ๏ธ ๐จ¶
โซ๏ธ ๐ ๐ถ & ๐ ๐จ ๐ Authorization ๐, โ
๐ฅ ๐ฒ Bearer โ ๐ค, & ๐ ๐จ ๐ค str.
๐ฅ โซ๏ธ ๐ซ ๐ Authorization ๐, โ๏ธ ๐ฒ ๐ซ โ๏ธ Bearer ๐ค, โซ๏ธ ๐ ๐จ โฎ๏ธ 4๏ธโฃ0๏ธโฃ1๏ธโฃ ๐ ๐ โ (UNAUTHORIZED) ๐.
๐ ๐ซ โ๏ธ โ
๐ฅ ๐ค ๐ ๐จ โ. ๐ ๐ช ๐ญ ๐ ๐ฅ ๐ ๐ข ๐ ๏ธ, โซ๏ธ ๐ โ๏ธ str ๐ ๐ค.
๐ ๐ช ๐ โซ๏ธ โช ๐ ๐ฉบ:

๐ฅ ๐ซ โ ๐ฌ ๐ค, โ๏ธ ๐ โถ๏ธ โช.
๐¶
, 3๏ธโฃ โ๏ธ 4๏ธโฃ โ โธ, ๐ โช โ๏ธ ๐ ๐จ ๐โโ.