Skip to content

๐Ÿ’‚โ€โ™‚ - ๐Ÿฅ‡ ๐Ÿ”

โžก๏ธ ๐ŸŒˆ ๐Ÿ‘ˆ ๐Ÿ‘† โœ”๏ธ ๐Ÿ‘† ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ› ๏ธ ๐Ÿ†”.

& ๐Ÿ‘† โœ”๏ธ ๐Ÿ•ธ โž•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๏ธโƒฃ โž• โธ, ๐Ÿ‘† โช โœ”๏ธ ๐Ÿ’ ๐Ÿ“จ ๐Ÿ’‚โ€โ™‚.