使用ADFS与SAML2.0(Sustainsys)实现Web应用SSO时遇错误
排查ADFS 2012 R2 + SAML2.0 SSO登录错误指南
嘿,我来帮你搞定这个ADFS SAML单点登录的错误!你遇到的"Encountered error during federation passive req..."是个比较模糊的前端提示,得从ADFS服务器和Web应用的配置细节入手排查,下面是我整理的几个关键排查方向:
1. 先看ADFS服务器的详细错误日志
这是最快速定位问题的方法,前端的提示太笼统,ADFS的管理员日志会给你具体的错误原因:
- 登录到ADFS服务器,打开事件查看器,导航到
Applications and Services Logs > AD FS > Admin - 找到和你登录操作时间对应的错误日志,里面会有具体的错误代码(比如ADFS211、ADFS302)和详细描述,比如证书不匹配、声明规则错误、信赖方配置问题等,这些信息是排查的核心。
2. 检查信赖方信任的核心配置
ADFS对信赖方的配置细节要求非常严格,一点点不匹配都会导致失败:
- 标识符匹配:确认ADFS里配置的信赖方标识符,和Web应用里的SAML实体ID完全一致,注意大小写、末尾斜杠、域名拼写这些细节,比如
https://yourapp.com/saml和https://yourapp.com/saml/是两个不同的标识符。 - ACS终结点验证:检查ADFS里信赖方的**断言消费服务(ACS)**地址,是否和Web应用里配置的ACS回调URL完全匹配,包括HTTP/HTTPS协议(如果ADFS强制HTTPS,Web应用的ACS也必须是HTTPS)。
- 声明转换规则:查看信赖方的颁发转换规则,确认是否配置了正确的用户属性映射,比如把AD的UPN、SAM账户名映射到SAML断言的NameID字段。如果规则缺失或者映射的属性在AD里不存在,ADFS会拒绝生成断言。
3. 证书相关问题排查
证书是SAML断言验证的核心,很多错误都和它有关:
- 服务通信证书:确认ADFS的服务通信证书未过期、由受信任的CA颁发(如果是自签证书,Web应用服务器必须把这个证书导入到受信任根证书存储)。
- 令牌签名证书:ADFS用这个证书签名SAML断言,Web应用必须配置这个证书的公钥来验证断言合法性。如果ADFS自动更新了签名证书(默认会自动轮换),但Web应用没同步更新公钥,就会出现验证失败的错误。
4. 网络与身份验证策略检查
因为Web应用和ADFS在同一网络,先确认基础连通性:
- 测试Web应用服务器能否正常访问ADFS的元数据URL(比如
https://adfs.yourdomain.com/federationmetadata/2007-06/federationmetadata.xml),如果访问失败,排查防火墙规则、DNS解析或者ADFS服务器的IIS配置。 - 检查ADFS的全局身份验证策略,确认允许的身份验证方法(比如表单身份验证)已启用,且信赖方信任没有覆盖全局策略禁用该方法。
5. 捕获并分析SAML请求
用浏览器开发者工具(F12)捕获登录时的SAML请求,检查关键参数:
Issuer字段是否和信赖方标识符一致AssertionConsumerServiceURL是否正确指向Web应用的ACS地址NameIDPolicy的格式是否和ADFS声明规则配置的格式匹配(比如ADFS默认用UPN格式,而Web应用要求email格式,就会导致冲突)
举个常见的例子:之前有个用户的信赖方标识符多了个末尾斜杠,ADFS直接拒绝了请求,去掉斜杠后就正常了;还有的是令牌签名证书过期,ADFS自动换了新证书,但Web应用没更新公钥,导致验证失败。
内容的提问来源于stack exchange,提问作者john paulo galera
相关产品推荐
相关产品推荐

