如何在 Rails 中通过 SAML 对用户进行身份验证时发送经过身份验证的响应?

How to send the authenticated response while authenticating a user via SAML in Rails?

我一直在尝试在我的应用程序中实施 SAML,其中我想对用户进行身份验证并创建 SAML 令牌(响应)并将用户重定向到创建会话的其他网站。 到目前为止,我已经能够获取有关 init 方法和 consume 方法的信息,这些方法将由其他网站实现。

def init
    request = OneLogin::RubySaml::Authrequest.new
    redirect_to(request.create(saml_settings))
  end

  def consume
    response          = OneLogin::RubySaml::Response.new(params[:SAMLResponse])
    response.settings = saml_settings

    if response.is_valid? && user = current_account.users.find_by_email(response.name_id)
      authorize_success(user)
    else
      authorize_failure(user)
    end
  end

关注此 Source

我想创建介于 initconsume 之间的方法。

更新:

就像我有这个,我猜它遵循 SAML 1.1,我想知道如何使用 Rails 中的 get_settings 方法生成 SAML 2.0 请求。

def SSOAccount.get_settings
    settings = Onelogin::Saml::Settings.new    
    settings.issuer                          = "https://example.com/test"    
    settings.idp_sso_target_url                ="https://testexample.com"  
    settings.idp_cert_fingerprint             ="########"
    settings.relying_party_identifier         = "knsdfnsdf"    
    settings.assertion_consumer_service_url   = "https://www.example.com/consume?http_referer=https://testexample.com"
    settings.idp_confirmation_method          = "urn:oasis:names:tc:SAML:1.0:cm:bearer"
    settings.asserting_party_id               = "23424dfsdf"            
    settings.referer_url = "https://textexample.com" 
    settings.groups                           = ["USER"]
    settings
  end

您可以 post 数据,但要以类似于重定向的方式进行。重定向的问题是数据通常大于浏览器可接受的容量 url。

您需要这样做,这样 post 来自用户的浏览器而不是您的服务器。也就是说,post 需要获取用户的浏览器会话,以便使用 SAML 令牌提交关联的 cookie 和会话数据。

一种解决方案是使用 saml_tools_demo's indentifies#create view 中所示的自行提交表单。

查看 matching controller action 以了解数据的构造方式。