【发布时间】:2020-09-17 06:43:06
【问题描述】:
我们有一个托管在反向代理后面的 FastApi 应用程序。
代理使用 Kerberos 对用户进行身份验证,并向请求添加 X-Remote-User HTTP 标头。
FastApi 应用程序需要此标头。这是一个示例路线:
@app.get("/user/me")
async def get_user_me(x_remote_user: str = Header(...)):
return {"User": x_remote_user}
请求需要 X-Remote-User 标头,这是预期行为。
当我们现在打开Swagger Ui 时,标头已记录在案,当单击“试用”时,我们可以提供标头值。 这种行为非常适合开发,但在所有其他情况下都是不受欢迎的,因为该标头是由反向代理提供的。例如,我们使用OpenAPI Generator 生成客户端,然后客户端在其请求中都需要 X-Remote-User 参数。
因此,具有区分环境的配置会很有用。如果我们在反向代理后面,那么 FastApi 生成的 OpenAPI Schema 不应该包含 X-Remote-Header,否则如果我们正在开发中,应该包含它。
到目前为止我做了什么:
- 我查看了有关 security 以及这些模块中的一些 source code 的文档,但找不到解决方案。
- 在文档中,我阅读了 Behind a Proxy 部分,但其中没有任何内容指向我潜在的解决方案。
- 我还阅读了有关 Middleware 的信息,但同样没有解决方案。
- 我们可以更改生成的 OpenApi 架构。我在my answer below 中画了这个草图,但这不是一个非常优雅的解决方案
有没有人能很好的解决这个问题?
【问题讨论】: