You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak 22作为SAML Broker对接远程IdP配置咨询

Keycloak 22 SAML Broker配置及Flask登录流程问题解决

一、配置选择:SAML IdP Broker还是直接Flask对接外部IdP?

你的需求是用户跳过Keycloak登录页、直接用外部IdP账号登录Flask应用,分两种场景:

  • 场景A:Flask直接对接外部SAML IdP:无需配置Keycloak Broker,直接在Flask中搭建SAML服务提供者(SP)即可。
  • 场景B:通过Keycloak作为Broker中转:需要配置Keycloak对接外部IdP,同时让Flask对接Keycloak,再设置Keycloak自动跳转外部IdP。

二、外部IdP Metadata.xml的使用

你提供的metadata.xml包含外部IdP的核心配置信息(实体ID、SSO/SLO地址、证书等),在配置SP端(Flask或Keycloak)时,直接导入该文件即可自动填充大部分参数,无需手动输入。

<md:EntityDescriptor validUntil="2025-11-13T14:27:57.8433870Z" cacheDuration="P365D" entityID="k*******b.*******.**">
<md:IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://k*******b.*******.**/saml20-logout"/>
<md:NameIDFormat>
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
</md:NameIDFormat>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://k*******b.*******.**/saml20-login"/>
</md:IDPSSODescriptor>
</md:EntityDescriptor>

三、cert.pem导出问题

IdP管理员索要的是你的SP端(Flask或Keycloak)的公钥证书,用于验证SP发送的请求签名或加密响应,获取方式分两种:

1. Flask作为SP时生成证书

用OpenSSL自行生成SP证书和密钥,再导出PEM格式公钥:

# 生成证书和私钥
openssl req -x509 -newkey rsa:4096 -keyout sp.key -out sp.crt -days 365 -nodes
# 转换为PEM格式公钥(给IdP管理员的cert.pem)
openssl x509 -in sp.crt -out cert.pem -outform PEM

2. Keycloak作为SP(Broker)时导出证书

  1. 登录Keycloak Admin控制台,进入目标Realm
  2. 左侧菜单选择Keys,找到类型为RS256、用途为SIGNATURE的密钥
  3. 点击该密钥的Public Key按钮,复制公钥内容
  4. 将复制的内容粘贴到文本文件中,保存为cert.pem即可

四、具体配置步骤

场景A:Flask直接对接外部IdP

  1. 使用flask-saml2库搭建SP,安装依赖:pip install flask-saml2
  2. 配置Flask-SAML2:导入外部IdP的metadata.xml,指定SP的证书、密钥、回调地址
  3. 在Flask中实现登录路由,直接重定向到外部IdP的SSO地址,完成登录流程

场景B:Keycloak Broker + Flask对接Keycloak

步骤1:配置Keycloak对接外部SAML IdP

  1. 进入Realm → Identity Providers → Add provider → 选择SAML v2.0
  2. 在配置页选择Import from XML,粘贴你提供的metadata.xml内容,自动填充配置
  3. 补充IdP的签名证书(从metadata的<X509Certificate>标签中提取内容,去掉换行和标签),保存配置

步骤2:设置Keycloak自动跳转到外部IdP

  1. 进入Realm → Authentication → Flows,复制默认的Browser流程,命名为Browser-External-IdP
  2. 修改复制后的流程:删除Username Password Form步骤,添加Identity Provider Redirector步骤,设置默认IdP为你刚配置的SAML IdP
  3. 进入Authentication → Bindings,将Browser Flow切换为Browser-External-IdP

步骤3:Flask对接Keycloak

使用flask-oidc库(推荐OIDC协议,比SAML更简洁),配置Keycloak的OIDC参数(客户端ID、客户端密钥、授权地址等),实现登录流程,此时用户访问Flask会直接跳转到外部IdP。

内容的提问来源于stack exchange,提问作者tascio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:09:53