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

Logowanie w aplikacji wielodomenowej

Logowanie w aplikacji wielodomenowej

Krzysztof Wawer

October 23, 2013
Tweet

More Decks by Krzysztof Wawer

Other Decks in Programming

Transcript

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

    Uwierzytelnienie (authentication) – potwierdzenie tożsamości
  2. 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
  3. routes.rb – wiele domen constraints DomainConstraint.new(AppConfig.domain) do ... end constraints

    ClientDomainConstraint.new(AppConfig.domain) do scope module: :client do ... end end
  4. 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
  5. 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
  6. Czego potrzebujemy ? • Adresu powrotnego do domeny klienta •

    Tokena uwierzytelniającego – w celu automatycznego zalogowania w domenie klienta
  7. 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
  8. 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
  9. 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
  10. 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