我正在尝试在我的FastApi服务中设置身份验证流程。我有一个工作的Docker容器,用于Keycloak,FastApi和Nginx。在nginx中,我将连接重定向到服务器的IP,到keycloak和fastapi(我有2个域,让我们称之为keycloakdomain.com和fastapidomain.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请求,我会得到访问令牌和我实际需要的数据。
1条答案
按热度按时间jdg4fx2g1#
我找到了解决问题的办法。问题出在Keycloak的nginx配置上。我没有设置头,所以反向代理不能正确转发主机头。
看看Jan的回答:Keycloak behind reverse proxy mixes internal and external addresses
希望这可以帮助别人。