讲师中心 微信公众号
AI工具推荐 视频效率加速

Java开发如何配置SAML鉴权环境_Spring Security SAML接入

阿明酱_3565

阿明酱_3565

发布时间:2026-03-17 14:24:01

|

918人浏览过

|

来源于php中文网

原创

Spring Security 5.7+ 不再原生支持 SAML,移除了 spring-security-saml2-core 模块,必须改用 spring-security-saml2-service-provider;需手动配置元数据 endpoint、证书校验、自定义属性映射。

java开发如何配置saml鉴权环境_spring security saml接入

Spring Security 5.7+ 不再原生支持 SAML

直接说结论:Spring Security 5.7 起移除了 spring-security-saml2-core 模块,官方不再维护 SAML 2.0 支持。如果你用的是 Spring Boot 3.x(对应 Spring Security 6.x),WebSecurityConfigurerAdapter 已废弃,旧的 SAML 配置方式完全失效。

这意味着——不是配置不对,而是“根本没这个类了”。常见错误现象包括:ClassNotFoundException: org.springframework.security.saml.SAMLAuthenticationFilter、IDE 找不到 SAMLBootstrap、Maven 编译报 spring-security-saml2-core 无法解析。

  • 必须改用 Spring Security 官方推荐的替代方案:spring-security-saml2-service-provider(仅 SP 端,即你的 Java 应用作为服务提供方)
  • 该模块只支持 SAML 2.0 Web SSO,不支持 IDP 功能(不能当身份源)
  • 最低要求 Spring Security 5.7.0+,Spring Boot 2.7+ 或 3.x(但 3.x 需额外适配 Jakarta EE 9+ 命名空间)
  • 旧项目升级时,所有 SAMLContextProviderSAMLProcessingFilter 类全部作废,不能复用

如何注册 SAML 服务提供方(SP)元数据

SAML 流程里,你的应用得先告诉 IDP “我是谁、我能接收什么断言、签名密钥长啥样”——这靠元数据(metadata)交换。Spring Security SAML2 不自动生成 XML 元数据文件,得手动构造或靠 endpoint 输出。

关键点是启用 /saml2/service-provider-metadata/{registrationId} 这个内置 endpoint,它会动态生成符合 SAML 2.0 标准的 SP 元数据 XML。

立即学习Java免费学习笔记(深入)”;

Alibabacloud Sdk Client Initialization For Java
Alibabacloud Sdk Client Initialization For Java

在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。

下载
  • 确保在 application.yml 中至少定义一个 registrationId,例如:spring.security.saml2.relyingparty.registration.my-sp
  • 启动后访问 http://localhost:8080/saml2/service-provider-metadata/my-sp 即可拿到 XML
  • 该 endpoint 默认 require 认证,如需未登录也能访问,需在安全配置中放行:requestMatchers("/saml2/service-provider-metadata/**").permitAll()
  • IDP 配置时,务必上传此 XML(而非手写),否则常见错误:Invalid issuer in assertionSignature validation failed

验证 SAML 响应签名和证书的坑

SAML 断言默认带 XML 签名,Spring Security SAML2 要求你显式提供 IDP 的公钥证书(X.509 PEM 格式),否则会抛 org.springframework.security.saml2.provider.service.authentication.Saml2AuthenticationException: Failed to validate signature

这不是可选步骤,是强制校验环节。容易被忽略的是证书格式和加载方式。

  • 证书必须是 PEM 格式(以 -----BEGIN CERTIFICATE----- 开头),不能是 DER 或 JKS
  • 路径要写对:spring.security.saml2.relyingparty.registration.my-sp.identityprovider.certificate-location=classpath:idp.crt
  • 如果证书链含中间 CA,必须合并进同一文件(顺序:leaf → intermediate → root)
  • 调试时可在日志加 logging.level.org.springframework.security.saml2=DEBUG,看是否成功加载证书及签名算法(如 SHA-256withRSA
  • 部分 IDP 默认用 SHA-1 签名,而 Spring Security SAML2 6.x 默认禁用 SHA-1,需显式开启:.signatureAlgorithms("http://www.w3.org/2000/09/xmldsig#rsa-sha1")

自定义 SAML 用户属性映射到 UserDetails

默认情况下,Spring Security SAML2 只把 Subject.NameID 当用户名,其余属性(如邮箱、角色)全丢弃。业务系统几乎都需要从 AttributeStatement 里提取字段,比如 mailgroups

RelyingPartyRegistrationassertionConsumerService 无法做到,必须注册自定义 Saml2AuthenticationConverter

  • 实现 Converter<saml2authenticationtoken saml2authenticatedprincipal></saml2authenticationtoken>,重写 convert() 方法
  • token.getSaml2Response().getAssertions().get(0).getAttributeStatements() 里遍历提取属性
  • 注意:SAML 属性名大小写敏感,且可能带命名空间前缀(如 urn:oid:0.9.2342.19200300.100.1.3 对应 email),别硬写字符串匹配
  • 角色映射建议用 SimpleGrantedAuthority 包装,并确保前缀为 ROLE_,否则 @PreAuthorize("hasRole('ADMIN')") 不生效
  • 别在 converter 里做远程调用(如查 DB),否则影响登录性能;属性缺失时返回空集合,别 throw 异常

复杂点在于 SAML 属性结构不统一——不同 IDP 返回的字段名、嵌套层级、编码方式(Base64?URI?)都可能不同。上线前一定拿真实 IDP 的响应 XML 做解析验证,而不是只测 mock 数据。

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

8737

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

5962

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

5352

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

964

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

808

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

1136

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2309

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

19651

2023.08.03

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

0

2026.09.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn