Frage

Wie kann ich zusätzliche Parameter wie übergeben, z. openid.ns.pape und openid.pape.max_auth_age Für die Google -Authentifizierung mit Rack :: OpenID

def new 
  response.headers['WWW-Authenticate'] = Rack::OpenID.build_header(
      :identifier => "https://www.google.com/accounts/o8/id",
      :required => ["http://axschema.org/contact/email"],
      :return_to => accounts_url,
      :method => 'POST')
    head 401
end

Ich möchte nur eine neue Sitzung zur Authentifizierung erzwingen
Ich bin neu bei Rails OpenID
Danke im Voraus.

War es hilfreich?

Lösung

Nach viel Googeln fand ich eine Seele zum Vorbeigehen openid.ns.pape Parameter in Rack::OpenIDDie Lösung wird in meinem gebloggt Persönlicher Blog.

Ich habe gerade einen Affenpatch zur Lösung dieses Problems gemacht. Hier ist der Patch

require 'openid/extensions/pape'

module Rack
  class OpenID

    private
      def begin_authentication(env, qs)
        req = Rack::Request.new(env)
        params = self.class.parse_header(qs)
        session = env["rack.session"]

        unless session
          raise RuntimeError, "Rack::OpenID requires a session"
        end

        consumer = ::OpenID::Consumer.new(session, @store)
        identifier = params['identifier'] || params['identity']
        immediate = params['immediate'] == 'true'

        begin
          oidreq = consumer.begin(identifier)
          add_simple_registration_fields(oidreq, params)

           unless params['pape'].nil?
            add_pape(oidreq,params['pape'])
          end

          add_attribute_exchange_fields(oidreq, params)
          add_oauth_fields(oidreq, params)
          url = open_id_redirect_url(req, oidreq, params["trust_root"], params["return_to"], params["method"], immediate)
          return redirect_to(url)
        rescue ::OpenID::OpenIDError, Timeout::Error => e
          env[RESPONSE] = MissingResponse.new
          return @app.call(env)
        end
      end


     def add_pape(oidreq,max_auth_age)
        papereq = ::OpenID::PAPE::Request.new
        papereq.add_policy_uri(::OpenID::PAPE::AUTH_PHISHING_RESISTANT)
        papereq.max_auth_age = max_auth_age
        oidreq.add_extension(papereq)
        oidreq.return_to_args['did_pape'] = 'y'
    end
  end
end

Da ich dies in einer Rails -App brauche, speichere ich den obigen Code in den Ordner "Initializer (config/Initializer/Rack_openid_patch.rb). Wenn Sie keine Rails verwenden, müssen Sie dies sparen und benötigen manuell im U'R -Projekt.

Jetzt müssen Sie die Papeoption zum Rack :: OpenID.build_header hinzufügen

max_auth_age = 0
response.headers['WWW-Authenticate'] = Rack::OpenID.build_header(
      :identifier => "https://www.google.com/accounts/o8/id",
      :required => ["http://axschema.org/contact/email"],
      :return_to => accounts_url,
      :pape => max_auth_age,
      :method => 'POST')
head 401

Stellen Sie sicher, dass Sie max_auth_age = 0 festlegen, um die Google -Authentifizierung für eine neue Sitzung zu erzwingen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top