本指南旨在帮助管理员解决下游业务系统(作为服务提供者 SP)通过飞连(作为身份提供者 IdP)进行 SAML 集成时遇到的各类异常场景(如:登录跳转失败、认证报错、登录后属性缺失等)。借助本文中的排查方法,管理员可快速定位问题方并解决两端配置不一致等核心问题。
名称 | 说明 |
|---|---|
metadata文件 | 元数据文件,记录 saml 认证各个参数。 |
Entity ID | 标识服务提供商的唯一标识,通常在元数据文件中 EntityDescriptor 元素中的 entityID 属性值。 |
ACS URL | 用于声明 SAML 断言发送地址,用于接收 IdP 发送的 SAML 断言。需要配置为元数据文件中 AssertionConsumerService 元素的 Location 属性值。 |
IdP (Identity Provider) | 身份提供商,在本文讨论环境中即飞连。负责验证用户身份并签发 SAML 断言。 |
SP (Service Provider) | 服务提供商,即下游业务系统。接收并校验飞连发送的断言,允许用户进入 |
在与企业进行用户 SSO 集成时,飞连作为身份提供者(IdP),企业自有的业务系统则作为服务提供者(SP)。通过 IdP 颁发的 SAML 断言(Token),下游应用提供者能够确定自身用户与飞连用户的对应关系,从而实现免密访问。
标准登录交互过程如下(以 SP 发起的单点登录为例):
通过对比“SP 发起”与“IdP 发起”两种模式,可以快速锁定是请求(Request)阶段还是响应(Response)阶段存在故障。
大多数 SAML 失败都是因为飞连与业务系统的参数配置不一致导致。请通过排查工具截获报文,按双方的 Metadata 和配置进行严格核对。
SAML 协议的交互在前端浏览器完成,必须通过抓包查看具体的 XML 内容。
F12 开启调试窗口,切换到 SAML 标签页即可使用。F12) -> 勾选“保留日志(Preserve log)”和“停用缓存(Disable cache)” -> 尝试复现问题 -> 复现后将网络请求列表导出为 .har 文件并手动进行 Base64 解码。获取方式
https://<飞连门户>:10443/api/idp/sso 或类似请求,在请求的 payload 里可以找到 SAMLrequest:sso?SAMLRequest 的请求,在请求体或者 Payload 里可以找到 SAMLrequest:报文解析
检查项 | SAMLRequest 中的位置 | 飞连管理后台配置检查点 | 校验规则 | 典型不匹配现象 |
|---|---|---|---|---|
Destination |
| IdP Metadata 中的 | 必须完全一致(协议、域名、路径) | 提示 Invalid request / 请求被拒绝 |
Binding |
| 飞连声明支持的绑定方式 | 必须为 | 请求解析失败或无响应 |
Issuer |
| 飞连后台单点登录应用详情中的 | 必须完全一致 | 提示应用不存在或未配置 |
ACS |
| 飞连后台单点登录应用配置的 | 必须完全一致 | 回跳失败或请求被拒 |
NameIDPolicy |
| 飞连支持的主键格式 | 需为 | 返回异常或无法生成断言 |
获取方式
关注从飞连跳转回业务系统时的最开始的几个请求,通常 Payload 中会包含解码后的 SAMLResponse 字段。
报文解析
检查项 | SAMLResponse 中的位置 | SP 端配置检查点 | 校验规则 | 典型不匹配现象 |
|---|---|---|---|---|
Issuer |
| SP Metadata 记录的飞连 Entity ID | 必须完全一致 | 提示不信任来源或校验失败 |
Audience |
| 业务系统自身的 Entity ID | 必须完全一致 | 提示 Audience mismatch |
ACS |
| 业务系统的 ACS URL | 必须完全一致 | 登录回跳失败 |
回跳地址 |
| 业务系统的 ACS URL | 必须完全一致 | 无法接收响应 |
NameID |
| 业务系统的主键校验规则(如要求工号) | 飞连传递的主键值必须与 SP 期望的主键匹配 | 提示用户不存在 |
Attribute |
| 业务系统需要的属性列表(如姓名、部门) | 属性名称和值需符合 SP 约定 | 登录后用户信息缺失 |
飞连默认将用户的 Email 作为 NameID 传递。若下游业务系统要求使用工号或其它字段作为唯一标识,请在飞连管理后台按以下步骤操作:
员工 ID (user_id)。字段映射。app_user_id(请确保全小写)并保存。<saml:NameID> 节点中传递给业务系统。SAML 流程依赖多处时间校验,包括:
NotBefore(生效时间)和 NotOnOrAfter(过期时间)。IssueInstant(请求生成时间)。若业务系统与飞连服务器时间不一致,可能导致断言被判定为“已过期”、“尚未生效”或“过期请求”。建议双方服务器均开启 NTP 时间同步,时间误差控制在 30 秒以内。
若通过上述报文分析和配置核对仍无法准确定位问题,请收集以下材料联系飞连技术支持:
.har 文件,或从抓包插件复制的完整 XML 文本(Request 和 Response)。/opt/corplink/log/portal.*.log。portal.*.log。