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

Keycloak SAML适配器:如何导出SP XML元数据?

我完全理解你的困惑——毕竟OIOSAML、Shibboleth这些工具都有直观的SP元数据导出功能,Keycloak在这方面的文档确实不够显眼。针对Keycloak 3.4的SAML适配器(比如Tomcat Valve),你可以通过以下几种方式生成SP XML元数据:

方法一:手动构建标准SAML元数据文件

SP元数据本质是符合SAML 2.0规范的XML结构,你可以基于自己的证书和服务URL手动编写,核心元素都很明确:

  • EntityID:你的服务唯一标识(通常用服务根URL或自定义ID)
  • Assertion Consumer Service URL:Keycloak适配器接收SAML断言的地址(Tomcat环境一般是你的服务URL/saml/SSO)
  • Single Logout Service URL:单点退出的回调地址(一般是你的服务URL/saml/SLO)
  • SP公钥证书:将你的证书转换为PEM格式,去掉头尾标记(-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----)后嵌入XML标签

给你一个简化的模板参考,直接替换占位内容即可:

<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="你的服务EntityID">
  <md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <md:KeyDescriptor use="signing">
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
          <ds:X509Certificate>你的公钥证书内容(去掉头尾标记,合并为一行)</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </md:KeyDescriptor>
    <md:KeyDescriptor use="encryption">
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
          <ds:X509Certificate>同上的公钥证书内容</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </md:KeyDescriptor>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="你的服务URL/saml/SSO" index="0"/>
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="你的服务URL/saml/SLO"/>
  </md:SPSSODescriptor>
</md:EntityDescriptor>
方法二:通过Keycloak Admin API提取配置生成

如果你已经在Keycloak控制台配置了对应的SP客户端,可以调用Admin API获取配置信息,再转换为元数据:

  1. 调用API:GET /auth/admin/realms/{你的Realm名}/clients/{客户端ID}
  2. 从返回的JSON中提取关键信息:
    • clientId 作为SP的EntityID
    • redirectUris 对应断言消费服务地址
    • attributes 中的证书相关字段
  3. 将这些信息填充到标准SAML元数据模板中即可。
方法三:尝试适配器内置元数据端点

部分Keycloak SAML适配器会提供自动生成元数据的端点,比如Tomcat环境下,如果你已经正确配置了Valve,可以尝试访问你的服务URL/saml/metadata,看看是否能直接获取生成好的SP元数据。需要确认keycloak-saml.xml中是否开启了相关配置,比如metadataURL参数是否正确设置。

注意事项

  • 证书内容要确保是纯文本格式,去掉所有换行符和头尾标记,避免XML解析错误
  • 根据你的安全需求调整AuthnRequestsSigned和WantAssertionsSigned参数的布尔值
  • 确保元数据中的URL和适配器配置文件keycloak-saml.xml里的地址完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:50:16