swagger 如何解决FastApi Keycloak令牌URL从DNS解析到Docker容器名称?

y4ekin9u  于 2023-08-05  发布在  Docker
关注(0)|答案(1)|浏览(167)

我正在尝试在我的FastApi服务中设置身份验证流程。我有一个工作的Docker容器,用于Keycloak,FastApi和Nginx。在nginx中,我将连接重定向到服务器的IP,到keycloak和fastapi(我有2个域,让我们称之为keycloakdomain.comfastapidomain.com)。
我正在使用FastApiKeycloak库在Keycloak中进行身份验证。我想通过我的fastapi服务的swagger文档中的“Authorize”按钮进行授权,这样我就可以从我的keycloak示例中获得后续请求的访问令牌。
下面是我在FastApi中的配置代码:

keycloak = FastAPIKeycloak(
   server_url="https://keycloakdomain.com/auth",
   client_id="mykeycloakclient",
   client_secret="secret",
   admin_client_secret="secret",
   realm="realmname",
   callback_uri="https://fastapidomain.com/docs",
 )
 keycloak.add_swagger_config(app)

字符串
然后,我保护一个端点,因此显示“授权”按钮。当我点击它,我看到的是:


的数据
在TOKEN URL中,我有容器名称和端口,而不是我在配置对象中编写的URL域(协议是HTTP,而不是HTTPS)。
我期待看到“https://keycloakdomain.com/auth/realms...”。
我做错什么了吗?我可以在某个地方设置baseUrl吗?
P.S:如果我用postman向我期望的端点(有域名的那个)发出POST请求,我会得到访问令牌和我实际需要的数据。

jdg4fx2g

jdg4fx2g1#

我找到了解决问题的办法。问题出在Keycloak的nginx配置上。我没有设置头,所以反向代理不能正确转发主机头。
看看Jan的回答:Keycloak behind reverse proxy mixes internal and external addresses
希望这可以帮助别人。

相关问题