如何使用IDP元数据处理ADFS返回的SAML2.0签名响应?
处理SAML2.0 HTTP Redirect绑定响应步骤
你收到的是SAML2.0标准的**HTTP重定向绑定(HTTP Redirect Binding)**响应格式,是IDP合法的返回形式之一,并非异常。处理流程如下:
- 第一步:提取URL参数
从回调URL的查询参数中提取三个核心参数:SAMLResponse、Signature、SigAlg,先对所有参数值做URL解码,当前参数值均经过了URL编码处理。 - 第二步:验证响应签名
- 按照SAML2.0 HTTP Redirect绑定的签名规则构造待验签原始串:如果存在
RelayState参数,按SAMLResponse=xxx&RelayState=xxx&SigAlg=xxx的顺序拼接,无RelayState则按SAMLResponse=xxx&SigAlg=xxx顺序拼接,所有参数值取URL解码后的原始值,不要提前做Base64解码。 - 导入IDP提前提供的签名公钥证书,使用
SigAlg指定的算法(当前为RSA-SHA256)对构造的原始串和收到的Signature值做验签,验签不通过直接拒绝该响应,防止伪造请求。
- 按照SAML2.0 HTTP Redirect绑定的签名规则构造待验签原始串:如果存在
- 第三步:解析SAML断言内容
- 对URL解码后的
SAMLResponse参数值做Base64解码,得到deflate压缩后的二进制流 - 对二进制流做inflate解压缩,即可得到标准的SAML断言XML格式内容
- 对URL解码后的
- 第四步:常规断言校验
拿到XML后按常规SAML校验逻辑处理即可:校验断言有效期、Issuer是否为对应IDP、Audience是否为当前SP、是否包含合法的用户属性信息等,校验通过后即可完成用户登录状态创建。
注意:如果你之前仅对接过HTTP POST绑定的SAML响应,会默认收到POST表单携带的XML内容,Redirect绑定的差异就是参数放在URL中且经过了URL编码+Base64+Deflate三层处理,不要误判为异常响应。
内容的提问来源于stack exchange,提问作者Kadhiresh Gajendiran
相关产品推荐
相关产品推荐

