Rails omniauth-saml gem没有签署SAMLRequest

时间:2018-03-30 21:40:54

标签: ruby-on-rails omniauth saml

此帖中任何不正确的术语都要提前道歉。我们不是SAML专家,并且一直关注各种宝石README和论坛/博客文章,以便我们在设置中尽可能地。

我们需要创建一个与IDP的SAML集成,这需要签名'握手'在允许我们的应用程序传递到其登录页面之前。我们已经使用Rails omniauth-saml gem(https://github.com/omniauth/omniauth-saml)设置了SAML,并成功测试了与Okta的集成。但是,我们尝试整合的IDP不接受我们的AuthnRequest。根据他们的日志,我们认为这与我们的SAMLRequest未正确签名有关。 omn​​iauth-saml文档没有提供有关签名请求的任何信息,但是我们能够在OneLogin ruby​​-saml gem中找到omniauth-saml gem构建的信息(https://github.com/onelogin/ruby-saml)。我们已将onelogin / ruby​​-saml中提到的签名服务设置为true并添加了签名方法和摘要方法,但我们的SAMLRequest似乎仍未正确签名。 这是我们的设置信息:

# we set security
  security = {authn_requests_signed: true, embed_sign: true, metadata_signed: true, soft: false, signature_method: XMLSecurity::Document::RSA_SHA1, digest_method: XMLSecurity::Document::SHA1}

  idp_metadata.merge(

    certificate: EXAMPLE_PUBLIC_CERT,
    private_key: EXAMPLE_PRIVATE_CERT,
    # we're using the environment variable here because each deploy of
    # our app has a different domain name 
    issuer: "https://" + ENV['MAIL_HOST'] + "/users/auth/saml/metadata",
    assertion_consumer_service_url: "https://" + ENV['MAIL_HOST'] + "/users/auth/saml/callback",
    assertion_consumer_service_binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST",
    # these attributes are set elsewhere
    request_attributes: attributes,
    security: security
  )

我们使用omniauth-saml生成的路径通过SAMLRequest GET参数重定向到IDP:user_saml_omniauth_authorize_path

我们无法找到有关应传递给authorize_path的其他参数的任何信息,以强制签名或沿着这些行进行任何操作。

我们的理解是,如果我们的SAMLRequest正确签名,SAMLRequest的使用者将需要来自我们的元数据xml的509Certificate信息进行解码,但我们能够在通用OneLogin解码器中解码SAMLRequest而无需其他信息。

任何帮助强制Authn签署我们的SAMLRequest的帮助都将非常感谢。

0 个答案:

没有答案