IDP发起的SAML SSO场景下用户跳转至SP受保护页面问题咨询
IDP Initiated SSO 完整处理流程及跳转逻辑说明
核心流程步骤
- 用户在IDP侧完成身份认证后,在IDP应用门户选择目标SP,或者IDP侧获取到用户要访问的SP侧受保护页面路径
- IDP按照SAML标准构造合法的Auth Response断言,同时将用户要跳转的SP侧受保护路径存入
RelayState参数(SAML 2.0标准定义的可选参数,专门用于传递跳转上下文信息) - IDP通过SAML绑定规则(通常是HTTP-POST绑定,将参数嵌入自动提交的表单,或者HTTP-Redirect绑定拼接在URL参数中),将
SAMLResponse和RelayState一同发送到SP预先配置的ACS(断言消费服务)端点 - SP的ACS端点收到请求后,首先完成SAMLResponse的合法性校验:包括验证签名有效性、断言有效期、签发者是否为信任的IDP、受众是否为当前SP等
- 校验通过后,SP为用户建立本地登录会话,随后读取
RelayState参数值:- 若
RelayState为SP侧合法的受保护路径(SP会做白名单/域名校验,避免开放重定向漏洞),则自动将用户重定向到该路径对应的页面 - 若未携带
RelayState或者参数不合法,SP会默认跳转到自身的首页或者预先配置的IDP发起登录默认落地页
- 若
LightSaml 实现注意事项
- IDP侧不需要修改SAML断言内部结构,直接在返回给用户的绑定响应中加入
RelayState参数即可,LightSaml框架本身支持该参数的自动绑定处理 - 建议提前和接入的SP约定
RelayState的规则,例如要求仅传递SP域名下的相对路径,或者IDP侧维护每个SP的可跳转路径白名单,避免传递非法路径被SP拦截 - 若对接的SP不支持通过
RelayState自定义跳转路径,需要在SP侧单独配置该IDP发起登录后的默认跳转地址,IDP侧不需要额外传递参数
内容的提问来源于stack exchange,提问作者peter hartshorn
相关产品推荐
相关产品推荐

