2014-11-24 17 views
6

Mam problem ze sprawnym działaniem, więc stworzyłem aplikację Rails w świecie piekła, aby spróbować uruchomić to.Uwierzytelnianie Shibboleth w Railsach

Oto repo z kodem, który nie działa: https://github.com/pitosalas/shibtry

Oto co zrobiłem zaczynając od pustej aplikacji Rails:

  1. dodałem dwa kamienie do plików gem:

    gem 'omniauth-shibboleth' 
    gem 'rack-saml' 
    
  2. dostałem Shibboleth meta dane ze strony internetowej mojej uczelni i przekształcono go za pomocą shib_conv.rb do odpowiedniego YAML: ./con fig.yml

  3. mam zaktualizowane trasy dodając get '/auth/:provider/callback', to: 'sessions#create'

  4. Mam umieścić punkt przerwania na SessionController#create

  5. Dodałem inicjatorów: omniauth.rb:

    Rails.application.config.middleware.use OmniAuth::Builder do 
        provider :shibboleth, { 
        :shib_session_id_field  => "Shib-Session-ID", 
        :shib_application_id_field => "Shib-Application-ID", 
        :debug      => true, 
        :extra_fields => [ 
         :"unscoped-affiliation", 
         :entitlement 
        ] 
        } 
    end 
    
  6. Dodałem inicjator rack_sam.rb:

    Rails.application.config.middleware.insert_after Rack::ETag, Rack::Saml, 
        { :metadata => "#{Rails.root}/config/metadata.yml"} 
    
  7. Teraz uruchomić serwer i przejdź do http://0.0.0.0:3000/auth/shibboleth i pojawia się błąd:

    undefined method `[]' for nil:NilClass' 
    

    który sięgają do tej linii w rack-SAML/misc/onelogin_setting.rb linii 13, która jest:

    settings.idp_sso_target_url = @metadata['saml2_http_redirect'] 
    

    innymi słowy, szukanie skrótu metadanych dla tego klucza. Zdarza się, że w moim pliku metadata.yml ten klucz jest obecny, ale do czasu, gdy dojdę do tej linii onelogin_setting.rb 13, @metadata jest zerowy (powinien zawierać zawartość pliku), w związku z czym klucz ten nie istnieje.

I to tutaj, na razie, szlak wysycha.

+0

Witam, czy kiedykolwiek udało ci się to zrobić? mogłem naprawdę skorzystać z pomocy, aby ustawić to również na moim uniwersytecie. –

+0

Tak, zrobiłem to w zupełnie inny sposób. Użyłem własnego mechanizmu google, aby umożliwić aplikacji zalogowanie się. Https://developers.google.com/identity/sign-in/web/ – pitosalas

+0

Mam, niestety, muszę to zrobić przez shibboleth dla aplikacji na mojej uczelni. jeśli masz jakieś potencjalne wskazówki lub wskazówki, jak sprawić, żeby działało, ja jestem uszy. Otrzymuję również ten błąd. –

Odpowiedz

0

Wygląda na to, że zapomniałeś dodać plik konfiguracyjny do inicjatora:

Rails.application.config.middleware.insert_after Rack::ETag, Rack::Saml, 
{ 
    :metadata => "#{Rails.root}/config/metadata.yml", 
    :config => "#{Rails.root}/config/rack-saml.yml" 
} 

i ustawienie saml_idp w rack-saml.yml musi pasować klucz do wejścia idp_lists w metadata.yml

1

Całkowicie ominąłem Shibboletha. Moim celem było umożliwienie logowania się do mojego systemu uwierzytelniania uniwersytetów, aby umożliwić uczniom zalogowanie się przy użyciu loginu ucznia, który jest poprzedzony aplikacjami google. Było to znacznie łatwiejsze: https://developers.google.com/identity/sign-in/web/

+0

robiąc to, czy nadal możesz odzyskać metadane studenta lub informacje o profilu? –

+1

Tak, niektóre, w zależności od tego, na co pozwala szkoła – pitosalas