2010-08-09 5 views
3

Je suis en train de déplacer une application pour utiliser uniquement la connexion fédérée Google (OpenID) pour une application (nous utilisons Google Apps pour tout et pensons qu'il serait plus facile de combiner la gestion des utilisateurs) . Alors que je peux me connecter avec succès et créer des utilisateurs, mes pensées sont maintenant sur la sécurité ...Google Apps et l'authentification Open ID dans Rails - Sécurité

Lorsqu'un utilisateur se connecte, je n'ai qu'un bouton "Connexion" - rien d'autre. Le domaine du site est codé en dur (où SITE_DOMAIN apparaît ci-dessous) et l'utilisateur est redirigé vers la page de connexion google typique.

Voici le code:

def create 
    open_id_authentication 
    end 

    protected 

    def open_id_authentication 
    openid_url = 'https://www.google.com/accounts/o8/site-xrds?hd=SITE_DOMAIN' 
    authenticate_with_open_id(openid_url, 
           :required => ['http://axschema.org/contact/email', 
              'http://axschema.org/namePerson/first', 
              'http://axschema.org/namePerson/last']) do |result, identity_url, registration| 
     case result.status 
     when :missing 
     failed_login "Sorry, the OpenID server couldn't be found" 
     when :invalid 
     failed_login "Sorry, but this does not appear to be a valid OpenID" 
     when :canceled 
     failed_login "OpenID verification was canceled" 
     when :failed 
     failed_login "Sorry, the OpenID verification failed" 
     when :successful 
     if @current_user = User.find_by_id_url(identity_url) 
      if @current_user.login_from(request.env['REMOTE_ADDR']) 
      successful_login 
      else 
      failed_login "Your OpenID profile registration failed: " + @current_user.errors.full_messages.to_sentence 
      end 
     else 
      ax_response = OpenID::AX::FetchResponse.from_success_response(request.env[Rack::OpenID::RESPONSE]) 
      @current_user = User.login_create(ax_response, identity_url, request.env['REMOTE_ADDR']) 
      successful_login 
     end 
     end 
    end 
    end 

Une fois la connexion réussie, je vous suffit d'enregistrer l'utilisateur dans une session ...

session[:current_user] = @current_user 

... et utiliser une méthode simple current_user dans le contrôleur d'application ...

def current_user 
    return session[:current_user] if defined?(session[:current_user]) 
    end 

Ma principale préoccupation concerne la sécurité. OpenIDuthentification utilise le magasin en mémoire et dans l'ensemble, cela semblait un peu trop facile à mettre en œuvre (après avoir lu des tonnes de documentation). Les tests de base montrent que cela fonctionne bien, mais je suis nerveux. :)

Des pensées?

J'utilise le plugin open_id_authentication et le joyau de Openid rubis de base (avec petit bijou rubis-openid applications découverte pour les applications google)

Répondre

Questions connexes