2015-03-19 1 views
1

Я успешно установил аутентификацию SAML, используя omniauth-saml в своем приложении Rails 4.2.0. Поскольку это приложение с несколькими арендаторами, и каждый арендатор может определить свой собственный IdP, это было сложно, но я это сделал.Могу ли я передать IdP обратно поставщику услуг с помощью omniauth-saml?

Когда IdP аутентифицировал пользователя, IdP отправляет его обратно в мое приложение по адресу /auth/saml/callback, стандартное место для omniauth. Пока я в порядке с отправкой пользователя на указанную страницу в моем приложении (скажем, на приборной панели), все это хорошо работает.

Но что, если пользователь пытался получить доступ к определенной странице и был отправлен на страницу входа? Если пользователь должен был нормально войти (адрес электронной почты/пароль), приложение rails запоминает возвращаемый URL-адрес и отправляет пользователя обратно туда, куда они пытались идти в первую очередь.

С omniauth-saml, я не уверен, как это сделать. Мой первый инстинкт - отправить параметр return_url в IdP, чтобы IdP мог отправить его обратно после аутентификации. Есть ли способ, которым я могу это сделать?

ответ

2

Поскольку я печатал свой вопрос, я придумал использовать сеанс для хранения возвращаемого URL-адреса. Поскольку я не мог найти ответ нигде раньше, я хотел бы поделиться им здесь.

Я имею OmniAuth использовать мою фазу установки следующим образом:

# config/initializers/omniauth.rb 
provider :saml, setup: true 

У меня есть контроллер сеансов заботиться о нем:

# config/routes.rb 
get '/auth/:provider/setup' => 'sessions#sso_setup' 

# controllers/sessions_controller.rb 
def sso_setup 
    session[:sso_return_url] = params[:return_url] if params[:return_url] 
    # setup... 
end 

Указание, что значение сеанса должно быть установлено только если params[:return_url] очень важен - я обнаружил, что sso_setup вызывается три раза. В третий раз return_url не установлен.

Когда IdP обращается к моему SP, я просто получаю значение sessions[:sso_return_url]. Если он установлен, я знаю, где перенаправить пользователя.

Смежные вопросы