ruby​​-saml SAMLRequest作为POST而不是GET

问题描述:

我开始为其中一个项目使用ruby-saml。我正在使用的IDP期望POST身份验证请求包含SAMLRequest的HTTP主体。查看authrequest.rb的源代码,create方法只能执行GET而不是POST。ruby​​-saml SAMLRequest作为POST而不是GET

我决定调用create_params并获取base64标记,我可以从我的视图中使用它来执行POST。 当我使用下面的代码

 

     params = {} 
     request = OneLogin::RubySaml::Authrequest.new 

     token = request.create_params(saml_settings, params) 
     p token 
     p token["SAMLRequest"] 
     p decode(token["SAMLRequest"]) 

当我尝试base64decode.org或致电解码方法,我得到的编码是不正确的。

1)我可以做POST而不是GET吗?
2)我在做什么错误的创建请求是不好的编码?
感谢

+0

必须有更简单的方法..但我已经创建的代码base64编码的令牌,我可以传递给应用程序。

 token1 = request.create(saml_settings) p token1 payload = CGI.unescape(token1.split("=").last) decoded = Base64.decode64(payload) p decoded zstream = Zlib::Inflate.new(-Zlib::MAX_WBITS) inflated = zstream.inflate(decoded) zstream.finish zstream.close p inflated encoded = Base64.encode64(inflated) encoded = encoded.gsub(/\n/,'') p encoded 
Greg

1)我可以做一个POST而不是GET?

是的,但支持POST-binding不仅仅是通过POST参数替换GET参数...... POST-binding上的签名嵌入在SAML消息中,而不是另一个GET参数。

2)我在做什么错在创建它的请求是不好的编码? 谢谢

该AuthNRequest不仅base64encoded,但也泄气。

尝试使用Base64 Decode + Inflate

你会发现线程有趣: https://github.com/onelogin/ruby-saml/issues/124