用于生成SAML签名的连接字符串的可能值是什么

时间:2017-01-05 18:56:32

标签: saml saml-2.0 onelogin

>   <samlp:LogoutRequest ID="_36167d94-d868-4c04-aee3-8bbd4ed91317"
> Version="2.0" IssueInstant="2017-01-05T16:21:55.704Z"
> Destination="https://werain.me/"
> xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"><Issuer
> xmlns="urn:oasis:names:tc:SAML:2.0:assertion">urn:federation:MicrosoftOnline</Issuer><NameID
> Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
> xmlns="urn:oasis:names:tc:SAML:2.0:assertion">4948f6ce-4e3b-4538-b284-1461f9379b48</NameID><samlp:SessionIndex>_eafbb730-b590-0134-a918-00d202739c81</samlp:SessionIndex></samlp:LogoutRequest>

鉴于我,Logout Request看起来像这样。如果我必须验证Logout请求,我是否必须构造看起来像这样的字符串(即原始字符串值)

SAMLRequest=<samlp:LogoutRequest ID="_36167d94-d868-4c04-aee3-8bbd4ed91317" ... </samlp:LogoutRequest>&SigAlg=http://www.w3.org/2000/09/xmldsig#rsa-sha1

然后验证上述字符串的签名,或者我encodeSAMLRequestSigAlg

SAMLRequest=Base64 encode value or raw logout request&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1

这种混乱的原因是 SAML规范说从here

中提取
  

由原始未编码的XML的串联组成的字符串   编写SAML协议消息(不是base64编码的版本),

但OneSAML使用Base64编码版本的请求(注销请求)创建签名。看看here

不确定我必须使用哪种正确的实现来验证签名。

注意:HTTP重定向绑定。

1 个答案:

答案 0 :(得分:0)

您的链接和报价与HTTP-Redirect绑定无关。

检查3.4.4.1部分 https://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf

Onelogin的SAML工具包按照标准实施签名。

例如,您可以看到simpleSAMLphp的实现以相同的方式在Redirect绑定上构建签名: https://github.com/simplesamlphp/saml2/blob/master/src/SAML2/HTTPRedirect.php#L22

或者opensaml https://github.com/apigee/java-opensaml2/blob/master/src/main/java/org/opensaml/saml2/binding/encoding/HTTPRedirectDeflateEncoder.java#L162

您可以使用以下方式播放签名和验证SAML消息: https://www.samltool.com/online_tools.php