弹簧网关(网络流量) - oauth 安全性 - 问题



Spring 2.2.5.RELEASE 弹簧网关 - 弹簧云启动网关 - 弹簧云安全 - 弹簧启动启动器OAuth2资源服务器

SSO:钥匙斗篷 8.0.2(码头工人(

我在弹簧网关安全配置方面遇到问题。在我的系统中,代理和防火墙后面有一个Spring网关和Keycloak实例,我希望它们在专用网络内进行通信。见下图 对于体系结构结构。

事实上,在我的专用网络中,由于防火墙规则,我无法访问互联网。

我尝试使用 keycloak 的公共地址为authorization-uri 配置 spring 提供程序,对于 token-uri/jwk-set-uri/user-info-uri 使用 keycloak 的私有地址:此配置不起作用,因为似乎授权 uri 和用户信息-uri 必须具有相同的基本 URL。

security:
oauth2:
client:
...
provider:
myprovider:
authorization-uri: http://sso.domain.it/auth/realms/myrealm/protocol/openid-connect/auth
token-uri:http://sso.private.name/auth/realms/myrealm/protocol/openid-connect/token
jwk-set-uri: http://sso.private.name/auth/realms/myrealm/protocol/openid-connect/certs
user-info-uri: http://sso.private.name/auth/realms/myrealm/protocol/openid-connect/userinfo
user-name-attribute: preferred_username

我收到 401 并且 Keycloak 记录此错误:

21:33:20,636 WARN  [org.keycloak.events] (default task-14) type=USER_INFO_REQUEST_ERROR, realmId=myrealm, clientId=null, userId=null, ipAddress=x.x.x.x, error=invalid_token, auth_method=validate_access_token

如果我尝试使用 keycloak 公共地址设置 user-info-uri,身份验证流程可以正常工作(显然删除了防火墙规则(。

有效但不能

security:
oauth2:
client:
...
provider:
myprovider:
authorization-uri: http://sso.domain.it/auth/realms/myrealm/protocol/openid-connect/auth
token-uri: http://sso.private.name/auth/realms/myrealm/protocol/openid-connect/token
jwk-set-uri: http://sso.private.name/auth/realms/myrealm/protocol/openid-connect/certs
user-info-uri: http://sso.domain.it/auth/realms/myrealm/protocol/openid-connect/userinfo
user-name-attribute: preferred_username

问题是,当Keycloak生成JWT时,它会在其中记录颁发者,在您的情况下 - 与授权URI主机名:sso.domain.it。当您稍后使用user-info-uri字段中提到的sso.private.name访问它时 - 将没有匹配,这反过来会导致401 Unauthorized. 要解决此问题,您需要为 Keyloak 设置环境变量

KEYCLOAK_FRONTEND_URL: http://sso.domain.it/auth

以您喜欢的方式 - 通过 Docker/Kubernetes 环境、Keycloak 启动命令行等

最新更新