我有一个带有 RedhatSSO (Keycloak) 作为 OIDC 提供程序的 Spring Boot + Spring Security 应用程序。此应用程序部署在 Openshift 上,它为其分配如下路线:http://my-app.cloud.mycompany.com/
. 该应用程序具有以下上下文路径:/my-app
.
当我使用应用程序的 Openshift 路由地址访问受保护资源时http://my-app.cloud.mycompany.com/my-app/someProtectedResource
,我被重定向到https://sso.mycompany.com
我登录的 Keycloak 登录页面,然后我被发送回http://my-app.cloud.mycompany.com/my-app/sso/login
. 然后它将代码交换为访问令牌并毫无问题地工作,允许访问受保护的路径。
但是,这不是我们的目标场景,因为所有应用程序都通过具有此 url 的 Apache 服务器访问http://intranet.mycompany.com
。
当我输入http://intranet.mycompany.com/my-app/someProtectedResource
请求时,我的应用程序在 Openshift 中的 pod 会重定向到https://sso.mycompany.com
. 但是参数redirect_uri
指向应用程序的 Openshift 路由地址的 URL,http://my-app.cloud.mycompany.com/my-app/sso/login
而不是http://intranet.mycompany.com/my-app/sso/login
:
16:38:21,634 DEBUG [org.keycloak.adapters.OAuthRequestAuthenticator] (default task-59) there was no code
16:38:21,634 DEBUG [org.keycloak.adapters.OAuthRequestAuthenticator] (default task-59) redirecting to auth server
16:38:21,634 DEBUG [org.keycloak.adapters.OAuthRequestAuthenticator] (default task-59) callback uri: http://my-app.cloud.mycompany.com/my-app/sso/login
这样,在成功登录后,我被发送到错误的地址并且单点登录失败。
我正在使用这个配置:
摇篮:
springBootVersion = '1.5.10.RELEASE'
keycloakVersion = '3.4.3.Final'
...
mavenBom "org.keycloak.bom:keycloak-adapter-bom:${keycloakVersion}"
...
compile 'org.keycloak:keycloak-spring-boot-starter',
'org.keycloak:keycloak-spring-security-adapter',
弹簧靴:
keycloak:
auth-server-url: https://sso.mycompany.com/auth
realm: MYREALM
resource: my-app
public-client: false
principal-attribute: preferred_username
credentials:
secret: 99988877766655555444333
autodetect-bearer-only: true
ssl-required: external
当应用程序位于 Apache 服务器后面时,如何使应用程序实现其实际redirect_uri
应该具有的功能?intranet.mycompany.com