【问题标题】:Authorization header is not sent in request using FastAPI使用 FastAPI 在请求中未发送授权标头
【发布时间】:2022-10-16 19:18:48
【问题描述】:

在我的代码中,我有一个请求标头“授权”,但在/docs 中,标头未发送:

 @router.get('/versions',tags=["Credentials"],responses={
        200: {
            "model": List[models.versions_info],
            "description": "Return has code",
            "headers": {"Authorization": {"description":"Token party","type":"string"}}
        }})
async def list_versions(request: Request,token: Union[str, None] = Header(alias="Authorization",default=None)): 
    print(token)
    out=[{"version": "2.1.1","url": "https://www.server.com/ocpi/2.1.1/"},{"version": "2.2","url": "https://www.server.com/ocpi/2.2/"}]
    return Response(status_code=200,content=json.dumps(out), media_type="application/json", headers={"Authorization": "Token "+config.globals['mytoken']})

在文档中:

【问题讨论】:

标签: python fastapi


【解决方案1】:

你不能那样做。授权在这里是一个保留的标头,您不能覆盖它。如果您将其重命名为不同的名称,您会在 curl 中看到它,并且它会按预期工作。请参阅此处如何实现基于 jwt 的身份验证:https://fastapi.tiangolo.com/tutorial/security/oauth2-jwt/

或者您可以使用Security 功能对其进行归档。这是一个独立的工作示例(@Pavel Gribov 的信任):

from fastapi import Security, Depends, FastAPI
from fastapi.security.api_key import APIKeyHeader

from pydantic import BaseModel

app = FastAPI()

token_key = APIKeyHeader(name="Authorization")


class Token(BaseModel):
    token: str


def get_current_token(auth_key: str = Security(token_key)):
    return auth_key


@app.get("/get_items")
def read_items(current_token: Token = Depends(get_current_token)):
    return current_token

看看如何works。

【讨论】:

猜你喜欢
  • 2016-06-27
  • 2019-05-29
  • 2018-01-27
  • 1970-01-01
  • 2020-08-16
  • 2018-12-30
  • 2022-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多