Passaggio di parametri aggiuntivi per l'autenticazione google - rotaie
-
26-10-2019 - |
Domanda
Come posso passare parametri aggiuntivi come openid.ns.pape
e openid.pape.max_auth_age
per l'autenticazione di Google con 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
Voglio solo forzare nuova sessione per l'autenticazione
Sono nuovo di rotaie OpenID
Grazie in anticipo.
Soluzione
Dopo un sacco di googling ho trovato un soultion per il passaggio di parametri openid.ns.pape
in soluzione Rack::OpenID
.The è bloggato nel mio personal blog .
Ho appena fatto una patch per risolvere questo Scimmia issue.Here è la 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 quando ho bisogno di questo in una applicazione Rails risparmio il codice di cui sopra nella cartella inizializzatori (config / inizializzatori / rack_openid_patch.rb). Se non si utilizza rotaie Penso che è necessario per salvare questo e richiedono manualmente u'r progetto.
Ora è necessario aggiungere l'opzione Pape al rack :: OpenID.build_header
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