Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Logowanie w aplikacji wielodomenowej

Logowanie w aplikacji wielodomenowej

794f638b6f7f5132d5a13230e61c9db2?s=128

Krzysztof Wawer

October 23, 2013
Tweet

Transcript

  1. Logowanie w aplikacji wielodomenowej Krzysztof Wawer krzysztof.wawer@gmail.com

  2. Pojęcia • Autoryzacja (authorization) – udzielenie dostępu do zasobów •

    Uwierzytelnienie (authentication) – potwierdzenie tożsamości
  3. Założenia: • Logowanie przez serwisy społecznościowe • Obsłużenie wielu domen

    bez konieczności ustawiania osobnych aplikacji (w zewnętrznym serwisie) dla każdej domeny
  4. routes.rb – wiele domen constraints DomainConstraint.new(AppConfig.domain) do ... end constraints

    ClientDomainConstraint.new(AppConfig.domain) do scope module: :client do ... end end
  5. Protokół autoryzacyjny - OAuth • OAuth - „Otwarty protokół pozwalający

    na bezpieczną autoryzację za pomocą prostych i standardowych metod ze stron internetowych, aplikacji mobilnych i aplikacji stacjonarnych” http://oauth.net • OAuth 1.0 (IV 2010) – RFC5849 • OAuth 2.0 (X 2012) – RFC6749
  6. app/config/initializers/omniauth.rb Rails.application.config.middleware.use OmniAuth::Builder do provider :google, GOOGLE_KEY, GOOGLE_SECRET end app/views/sessions/new.html.haml

    = link_to 'Sign In with Google', '/auth/google'
  7. Jak działa OmniAuth Aplikacja OmniAuth Google Autoryzacja Request Phase Callback

    Phase
  8. Gdzie leży problem ? • Niektóre serwisy (m.in. Facebook, Google)

    wymagają podania stałego adresu powrotnego (redirect_uri) bez moliwości modyfikacji dla wielu domen
  9. Uwierzytelnienie w domenie klienta client.com app.com Google Uwierzytelnienie

  10. Uwierzytelnienie w domenie klienta client.com app.com Google Uwierzytelnienie ?

  11. Czego potrzebujemy ? • Adresu powrotnego do domeny klienta •

    Tokena uwierzytelniającego – w celu automatycznego zalogowania w domenie klienta
  12. Adres powrotny • OAuth 1.0 – „oauth_callback” – „oauth_nonce” •

    OAuth 2.0 – „redirect_uri” – „state” • Parametry „oauth_nonce” i „state” nie mogą zawierać czystego adresu url → używamy np. Base64
  13. OAuth 1.0 - oauth_nonce • Przekazywany do serwera uwierzytelniającego •

    Nie jest przekazywany z powrotem do naszej aplikacji • Uniemożliwia to wykonanie przekierowania bazującego na wartości oauth_nonce
  14. Uwierzytelnienie w domenie klienta client.com Twitter Uwierzytelnienie

  15. OAuth 2.0 - state • Przekazywany do serwera uwierzytelniającego •

    Przekazywany z powrotem do naszej aplikacji
  16. Uwierzytelnienie w domenie klienta client.com app.com Google Uwierzytelnienie state

  17. app/config/initializers/omniauth.rb Rails.application.config.middleware.use OmniAuth::Builder do provider :google, GOOGLE_KEY, GOOGLE_SECRET, redirect_uri: 'http://app.com/auth/google/callback'

    end app/views/sessions/new.html.haml = link_to 'Sign In with Google', ”/auth/google?state=#{encoded_back_url}”
  18. Problemy w istniejących strategiach OmniAuth • W strategiach wykorzystujących OAuth

    1.0 (OmniAuth::Strategies::OAuth) nie trzeba konfigurowania parametrów • W strategiach wykorzystujących OAuth 2.0 (OmniAuth::Strategies::OAuth2) trzeba ustawić redirect_uri i state
  19. Sprawdzone strategie • Google (OAuth 2.0) – omniauth-google-oauth2 • LinkedIn

    (OAuth 2.0) - https://github.com/neubloc/omniauth-linkedin-oauth2 • Twitter (OAuth 1.0) - omniauth-twitter
  20. Pytania ???