私はPythonのFastapiに少し新しいことです。私は、JWTトークンベースの承認を持つ必要があるAPIバックエンドフレームワークを構築しています。さて、私はJWTトークンを生成する方法を知っていますが、Pythonの高速APIでAPIメソッドと統合する方法はわかりません。どんなポインタも本当に感謝されます。
私は受け入れられた答えに加えることができる特定の改善を見つけました:
get_token_auth_header
。さらに、生成されたドキュメントは、認証に関して、スーパークリアで説明的であることを目的としています。JOSEError
の子孫であるすべての例外をキャッチし、それらのメッセージを印刷し、特定の例外をキャッチし、カスタムメッセージの書き込みを回避できます。サンプルスニペット:どこで...
/endpoints
- hello.py
- __init__.p
dependency.py
main.py
# dependency.py script
from jose import jwt
from jose.exceptions import JOSEError
from fastapi import HTTPException, Depends
from fastapi.security import HTTPBasicCredentials, HTTPBearer
security = HTTPBearer()
async def has_access(credentials: HTTPBasicCredentials = Depends(security)):
"""
Function that is used to validate the token in the case that it requires it
"""
token = credentials.credentials
try:
payload = jwt.decode(token, key='secret', options={"verify_signature": False,
"verify_aud": False,
"verify_iss": False})
print("payload => ", payload)
except JOSEError as e: # catches any exception
raise HTTPException(
status_code=401,
detail=str(e))
# main.py script
from fastapi import FastAPI, Depends
from endpoints import hello
from dependency import has_access
app = FastAPI()
# routes
PROTECTED = [Depends(has_access)]
app.include_router(
hello.router,
prefix="/hello",
dependencies=PROTECTED
)
# hello.py script
from fastapi import APIRouter
router = APIRouter()
@router.get("")
async def say_hi(name: str):
return "Hi " + name
上記のすべての機能を利用することによって、あなたはセキュリティスーパーファストを持つAPIを構築するようになりました:)