【问题标题】:Spring gateway(webflux) - oauth security - issueSpring gateway(webflux) - oauth 安全 - 问题
【发布时间】:2020-08-31 02:22:02
【问题描述】:

春季 2.2.5.RELEASE 春天网关 - spring-cloud-starter-gateway - 春天云安全 - spring-boot-starter-oauth2-resource-server

SSO:keycloak 8.0.2(码头工人)

我对 spring 网关安全配置有疑问。在我的系统中,代理和防火墙后面有一个 Spring 网关和 Keycloak 实例,我希望它们在专用网络内进行通信。请参阅以下image 对于架构结构。

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

我尝试使用 keycloak 的公共地址作为授权 uri 和 keycloak 的私有地址来配置 spring 提供程序:此配置不起作用,因为似乎authorization-uri 和user-info-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

【问题讨论】:

    标签: java spring security oauth-2.0 gateway


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-22
      • 2020-11-18
      • 2020-10-09
      • 2016-11-13
      • 2019-03-29
      • 2022-06-10
      • 2015-03-05
      • 1970-01-01
      相关资源
      最近更新 更多