tutorial rails oauth-2.0 multi-tenant github-api

oauth-2.0 - tutorial - oauth2 rails



github oauth con mĂșltiples dominios (2)

Puede anular la URL de devolución de llamada, pero debe coincidir con el nombre de host en la configuración de la aplicación OAuth. Este documento proporciona una lista de coincidencias buenas y malas: http://developer.github.com/v3/oauth/#redirect-urls

Dado que se permiten diferentes contextos, una solución sería crear diferentes contextos en una URL de devolución de base y luego usar la información de contexto para redirigir al host específico. Significaría que estarías actuando como un "intermediario" y necesitarías pasar cierta información al host objetivo.

Si su URL de devolución de llamada es oauth.onruby.de , entonces oauth.onruby.de/cust1 y oauth.onruby.de/cust2 serán válidos de acuerdo con Github. Luego puede redirigir /cust1 a cust1.de y /cust2 a cust2.de .

Tenga en cuenta que oauth.onruby.de actuaría como puerta de enlace o intermediario y debería garantizar que no haya exposiciones de seguridad.

Estoy ejecutando una aplicación que se ejecuta en varios subdominios usergroupXYZ.onruby.de y también admite dominios arbitrarios como alias. para que pueda acceder al dominio a través de yourusergroup.onruby.de o mediante customdomain.de.

la aplicación proporciona inicios de sesión a través de twitter oauth y github oauth2.

el problema es que no encontré la manera de admitir github auth a través de dominios personalizados. siempre obtengo errores de redirect_uri_mismatch de github.

la autenticación de Twitter no tiene un problema con la redirección a un dominio diferente.

¿Alguien tiene una solución a este problema que no sea crear un token de aplicación github para cada dominio personalizado?


Sí, hicimos lo que Akber sugirió. Tenemos dos sitios, xxx.com y xxx.co.uk y queremos utilizar la aplicación One github para ambos sitios OAuth.

Usamos las gemas de Rails y OmniAuth.

Lo primero que debemos hacer es agregar com o co.uk al final de la URL de devolución de llamada

class OmniAuth::Strategies::GitHub # Some code are omitted def callback_url url = super matches = url.match(/xxx/.([a-z|/.]+)(:/d+)?///) if matches && matches[1] != ''com'' tld = matches[1] url.gsub!("xxx.#{matches[1]}", ''xxx.com'') url << "/#{tld}" end url end end

y aquí está el código middleware de rails que redirecciona cuando Github OAuth devuelve la llamada

def call(env) match = env["PATH_INFO"].match(//A//users//auth//github//callback//(.+)/Z/) if match host = env["HTTP_HOST"] [301, {"Location" => "#{env[''rack.url_scheme'']}://#{host.gsub(''com'', match[1])}/users/auth/github/callback?#{env["QUERY_STRING"]}"}, self] else @app.call(env) end end