Мога ли да накарам IdP да препрати параметър обратно към моя доставчик на услуги с omniauth-saml?

Успешно настроих SAML удостоверяване с помощта на omniauth-saml в моето приложение Rails 4.2.0. Тъй като това е приложение с множество клиенти и всеки клиент може да дефинира свой собствен IdP, беше трудно, но успях.

Когато IdP е удостоверил потребителя, IdP го изпраща обратно към моето приложение на /auth/saml/callback, стандартното място за omniauth. Докато съм съгласен с изпращането на потребителя до определена страница в моето приложение (да речем, таблото за управление), всичко това работи добре.

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

С omniauth-saml не съм сигурен как да направя това. Първият ми инстинкт е да изпратя параметър return_url на IdP, така че IdP да може да го изпрати обратно при удостоверяване. Има ли начин да направя това?


person Aaron    schedule 19.03.2015    source източник


Отговори (1)


Докато написвах въпроса си, ми хрумна идеята да използвам сесията за съхраняване на 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]. Ако е зададено, знам къде да пренасоча потребителя.

person Aaron    schedule 19.03.2015