故障现象

配置完 GlobalProtect 与 Keycloak SAML 对接后,弹出的 Keycloak 报下列错误。

GlobalProtect 对接 Keycloak 报 invalid Request 及 error=client_not_found_globalprotect


在 Keycloak 后台看到下列日志:

2024-08-21 14:18:50,491 WARN  [org.keycloak.events] (executor-thread-42) type=LOGIN_ERROR, realmId=d31630c0-bf7c-4959-8c83-1496d421085a, clientId=null, userId=null, 
ipAddress=10.10.50.128, error=client_not_found, reason=Cannot_match_source_hash
  • 1.
  • 2.

故障原因及解法

默认 PA 防火墙生成的 SAML metadata 会使用管理口,在生成时选择 Global-protect 的 Portal FQDN 即可解决。

GlobalProtect 对接 Keycloak 报 invalid Request 及 error=client_not_found_Paloalto_02

GlobalProtect 对接 Keycloak 报 invalid Request 及 error=client_not_found_SAML_03

导出后内容如下:

GlobalProtect 对接 Keycloak 报 invalid Request 及 error=client_not_found_Paloalto_04

再将其导入 Keycloak 的 Client 中即可。

GlobalProtect 对接 Keycloak 报 invalid Request 及 error=client_not_found_Keycloak_05

GlobalProtect 对接 Keycloak 报 invalid Request 及 error=client_not_found_SAML_06

GlobalProtect 对接 Keycloak 报 invalid Request 及 error=client_not_found_Paloalto_07

GlobalProtect 对接 Keycloak 报 invalid Request 及 error=client_not_found_Paloalto_08

故障分析

碰到这问题一开始没啥头绪,查了很多帖子都没有很贴合这个场景的解法。后来看了下 GlobalProtect 日志,发现点端倪:

在 GPS.log 中看到下列 saml 请求信息,刚好是 base64 编码的

GlobalProtect 对接 Keycloak 报 invalid Request 及 error=client_not_found_globalprotect_09

解码后看到是个 HTTP Post 请求,发送给 Keycloak 的( auth.halfcoffee.com),请求正文是另一个 base64 编码。

GlobalProtect 对接 Keycloak 报 invalid Request 及 error=client_not_found_Paloalto_10

再次解码,看到 <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"> https://gp.halfcoffee.com:443/SAML20/SP 这句,Keycloak 是按照这里的 URL 去判断哪个 Client 发来的,把 Client ID 配置成这个 URL 问题就解决了。

GlobalProtect 对接 Keycloak 报 invalid Request 及 error=client_not_found_SAML_11