fastapi - 解决通过Header获取token和OpenApi不兼容的问题

在FastAPI通过标注Header类型获取Authorization时, 会导致openapi页面的请求没法使用

from typing import Annotated

from fastapi import FastAPI, Header, Request, Depends, Cookie, Query, APIRouter
from fastapi.routing import APIRoute
from fastapi.security.api_key import APIKeyCookie, APIKeyHeader, APIKeyQuery
from fastapi.openapi.models import SecuritySchemeType

app = FastAPI()

@app.get("/get_key")
def get_api_key(
    request: Request,
    authorization: Annotated[str, Header()],
):
    print(authorization)
    print(request.headers)
    return "OK"

这是因为openapi发请求时会过滤掉token的字段, 导致fastapi报错

img

为了解决这个问题fastapi把认证相关的逻辑放到了fastapi.security.api_key模块,通过Depends的方式来解决的.

from typing import Annotated

from fastapi import FastAPI, Header, Request, Depends, Cookie, Query, APIRouter
from fastapi.routing import APIRoute
from fastapi.security.api_key import APIKeyCookie, APIKeyHeader, APIKeyQuery
from fastapi.openapi.models import SecuritySchemeType

app = FastAPI()

@app.get("/get_key")
def get_api_key(
    request: Request,
    authorization: Annotated[str,
                             Depends(APIKeyHeader(name="authorization"))],
):
    print(authorization)
    print(request.headers)
    return "OK"

img

img

这样就解决了!

posted @ 2024-05-11 14:12  侯佳奇  阅读(168)  评论(0)    收藏  举报