Rod*_*o A 4 python python-3.x fastapi
我想启用 API 密钥标头以使用 FastAPI 在我的 API 中生成不记名令牌,但我在从 OpenAPI UI 获取和发送不记名令牌时遇到问题,我的令牌端点如下所示
api_key_header = APIKeyHeader(name='X-API-Key', auto_error=True)
app_auth = APIRouter()
@app_auth.post('/token', summary="Returns Bearer Token",
tags=["Auth"])
async def login(api_key_header: str = Security(api_key_header)):
if api_key_header != '123':
raise HTTPException(status_code=HTTP_401_UNAUTHORIZED,
detail='wrong api key',
headers={"WWW-Authenticate": "Bearer"})
else:
jwt_token = create_jwt_token(user)
return jwt_token
Run Code Online (Sandbox Code Playgroud)
但是,我通过 OpenAPI 将生成的令牌传递到另一个端点时遇到了麻烦(如果我只是将它发送到其他客户端的标头中,它就可以工作),当我测试其他端点时,它不会在标头中发送令牌

我也启用了
oauth_schema = OAuth2PasswordBearer(tokenUrl='/token')
Run Code Online (Sandbox Code Playgroud)
app = FastAPI(title="My test api", version="1.0")
app.include_router(app_auth)
app.include_router(app_test, prefix='/v1.0', dependencies=[Depends(check_jwt_token)])
Run Code Online (Sandbox Code Playgroud)
和 check_jwt_token
async def check_jwt_token(token: str = Depends(oauth_schema)):
"""
it decods the token and check if already expired
"""
Run Code Online (Sandbox Code Playgroud)
额外:您可以看到端点正确处理承载令牌,由邮递员测试
我只是弄清楚,这是答案,以防对其他人有帮助
我只需要改变oauth_schema = OAuth2PasswordBearer(tokenUrl='/token')
foroauth_schema = HTTPBearer()和 change
async def check_jwt_token(token: HTTPAuthorizationCredentials = Security(oauth_schema)),以及函数内部:
token= token.dict()['credentials']
| 归档时间: |
|
| 查看次数: |
11194 次 |
| 最近记录: |