Una solución SSO para Nginx que utiliza el módulo auth_request. Vouch Proxy puede proteger todos sus sitios web a la vez.
Vouch Proxy admite muchos proveedores de inicio de sesión OAuth y OIDC y puede imponer la autenticación para...
GitHub
Empresa GitHub
Autenticación independiente
Okta
Flojo
ADFS
AD azul
Alibaba / Aliyun iDaas
AWS Cognito
Contracción nerviosa
Discordia
autenticación segura
casa rural
capa de llaves
Biblioteca del servidor OAuth2 para PHP
Asistente de inicio
OpenStax
Ory Hidra
Siguiente nube
la mayoría de los demás proveedores de OpenID Connect (OIDC)
Háganos saber cuando haya implementado Vouch Proxy con su IdP o biblioteca preferida para que podamos actualizar la lista.
Si Vouch se ejecuta en el mismo host que el proxy inverso de Nginx, el tiempo de respuesta desde el punto final /validate
a Nginx debe ser inferior a 1 ms .
¿Qué hace Vouch Proxy...?
Instalación y configuración
Vouch Proxy "en un camino"
Configuraciones adicionales de Nginx
Configuración mediante variables ambientales
Consejos, trucos y configuraciones avanzadas
Alcances y reclamaciones
Ejecutando desde Docker
Entrada de Kubernetes Nginx
Compilando desde la fuente y ejecutando el binario
/iniciar sesión y /cerrar sesión redirección de puntos finales
Solución de problemas, soporte y solicitudes de funciones (lea esto antes de enviar un problema en GitHub)
Recibo un bucle de redireccionamiento infinito que me devuelve a mi IdP (Google/Okta/GitHub/...)
Bien, miré los problemas e intenté algunas cosas con mis configuraciones pero todavía no funciona.
Contribuir a Vouch Proxy
Autorización avanzada usando OpenResty
El flujo de inicio de sesión y autenticación mediante Google Oauth
Vouch Proxy (VP) obliga a los visitantes a iniciar sesión y autenticarse con un IdP (como uno de los servicios enumerados anteriormente) antes de permitirles acceder a un sitio web.
VP también se puede utilizar como una solución de inicio de sesión único (SSO) para proteger todas las aplicaciones web en el mismo dominio.
Después de que un visitante inicia sesión, Vouch Proxy permite el acceso a los sitios web protegidos durante varias horas. VP verifica cada solicitud para garantizar que sea válida.
VP puede enviar el correo electrónico, el nombre y otra información del visitante que proporciona el IdP (incluidos los tokens de acceso) a la aplicación web como encabezados HTTP. VP se puede utilizar para reemplazar por completo la gestión de usuarios de aplicaciones.
Vouch Proxy se basa en la capacidad de compartir una cookie entre el servidor Vouch Proxy y la aplicación que protege. Normalmente, esto se hará ejecutando Vouch en un subdominio como vouch.yourdomain.com
con aplicaciones ejecutándose en app1.yourdomain.com
y app2.yourdomain.com
. El dominio protegido es .yourdomain.com
y la cookie Vouch Proxy debe configurarse en este dominio configurando vouch.domains para incluir yourdomain.com
o, a veces, configurando vouch.cookie.domain en yourdomain.com
.
cp ./config/config.yml_example_$OAUTH_PROVIDER ./config/config.yml
cree credenciales OAuth para Vouch Proxy en google o github, etc.
asegúrese de dirigir la URL de devolución de llamada al punto final Vouch Proxy /auth
configurar Nginx...
La siguiente configuración de Nginx supone...
Nginx, vouch.yourdomain.com
y protectedapp.yourdomain.com
se ejecutan en el mismo servidor
ambos dominios funcionan como https
y tienen certificados válidos (si no, cambie para listen 80
y configure vouch.cookie.secure en false
)
servidor { escuchar 443 ssl http2; nombre_servidorprotegidoapp.sudominio.com; raíz /var/www/html/; ssl_certificate /etc/letsencrypt/live/protectedapp.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/protectedapp.yourdomain.com/privkey.pem; # enviar todas las solicitudes al punto final `/validate` para autorización auth_request /validate; ubicación = /validate { # reenviar la solicitud /validate a Vouch Proxy proxy_pass http://127.0.0.1:9090/validate; # asegúrese de pasar el encabezado del host original proxy_set_header Host $http_host; # Vouch Proxy solo actúa sobre los encabezados de solicitud proxy_pass_request_body off; proxy_set_header Longitud del contenido ""; # opcionalmente agregue X-Vouch-User según lo devuelto por Vouch Proxy junto con la solicitud auth_request_set $auth_resp_x_vouch_user $upstream_http_x_vouch_user; # opcionalmente agregue X-Vouch-IdP-Claims-* reclamos personalizados que está rastreando # auth_request_set $auth_resp_x_vouch_idp_claims_groups $upstream_http_x_vouch_idp_claims_groups; # auth_request_set $auth_resp_x_vouch_idp_claims_given_name $upstream_http_x_vouch_idp_claims_given_name; # opcionalmente agregue X-Vouch-IdP-AccessToken o X-Vouch-IdP-IdToken # auth_request_set $auth_resp_x_vouch_idp_accesstoken $upstream_http_x_vouch_idp_accesstoken; # auth_request_set $auth_resp_x_vouch_idp_idtoken $upstream_http_x_vouch_idp_idtoken; # estos valores de retorno son utilizados por la llamada @error401 auth_request_set $auth_resp_jwt $upstream_http_x_vouch_jwt; auth_request_set $auth_resp_err $upstream_http_x_vouch_err; auth_request_set $auth_resp_failcount $upstream_http_x_vouch_failcount; # Vouch Proxy puede ejecutarse detrás del mismo proxy inverso Nginx # es posible que deba cumplir con la denominación del servidor "ascendente" # proxy_pass http://vouch.yourdomain.com/validate; # proxy_set_header Anfitrión $http_host; } # si validar devuelve `401 no autorizado` entonces reenvía la solicitud al bloque error401 error_page 401 = @error401; ubicación @error401 { # redirigir a Vouch Proxy para iniciar sesión retorno 302 https://vouch.yourdomain.com/login?url=$scheme://$http_host$request_uri&vouch-failcount=$auth_resp_failcount&X-Vouch-Token=$auth_resp_jwt&error=$ auth_resp_err; # normalmente *quieres* redirigir a Vouch que se ejecuta detrás de la misma configuración de Nginx protegida por https # pero para comenzar puedes simplemente reenviar al usuario final al puerto en el que se ejecuta vouch # return 302 http://vouch.yourdomain.com:9090/login?url=$scheme://$http_host$request_uri&vouch-failcount=$auth_resp_failcount&X-Vouch-Token=$auth_resp_jwt&error=$auth_resp_err; } ubicación / { # reenviar solicitudes autorizadas a su servicio protectedapp.yourdomain.com proxy_pass http://127.0.0.1:8080; # es posible que deba configurar estas variables en este bloque según https://github.com/vouch/vouch-proxy/issues/26#issuecomment-425215810 # auth_request_set $auth_resp_x_vouch_user $upstream_http_x_vouch_user # auth_request_set $auth_resp_x_vouch_idp_claims_groups $upstream_http_x_vouch_idp_claims_groups; # auth_request_set $auth_resp_x_vouch_idp_claims_given_name $upstream_http_x_vouch_idp_claims_given_name; # establecer encabezado de usuario (normalmente un correo electrónico) proxy_set_header X-Vouch-User $auth_resp_x_vouch_user; # opcionalmente, pasar cualquier reclamación personalizada que estés rastreando # proxy_set_header X-Vouch-IdP-Claims-Groups $auth_resp_x_vouch_idp_claims_groups; # proxy_set_header X-Vouch-IdP-Claims-Given_Name $auth_resp_x_vouch_idp_claims_given_name; # opcionalmente pasar el token de acceso o idtoken # proxy_set_header X-Vouch-IdP-AccessToken $auth_resp_x_vouch_idp_accesstoken; # proxy_set_header X-Vouch-IdP-IdToken $auth_resp_x_vouch_idp_idtoken; } }
Si Vouch está configurado detrás del mismo proxy inverso nginx (tal vez para que pueda configurar SSL), asegúrese de pasar el encabezado Host
correctamente; de lo contrario, la cookie JWT no se puede configurar en el dominio.
servidor { escuchar 443 ssl http2; nombre_servidor aval.sudominio.com; ssl_certificate /etc/letsencrypt/live/vouch.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/vouch.yourdomain.com/privkey.pem; ubicación / { proxy_pass http://127.0.0.1:9090; # asegúrese de pasar el encabezado del host original proxy_set_header Host $http_host; } }
A partir de v0.33.0
Vouch Proxy se puede servir dentro de una ubicación (ruta) de Nginx configurando vouch.document_root: /vp_in_a_path
Esto evita la necesidad de configurar un dominio separado para Vouch Proxy como vouch.yourdomain.com
. Por ejemplo, el inicio de sesión de VP se realizará desde https://protectedapp.yourdomain.com/vp_in_a_path/login
servidor { escuchar 443 ssl http2; nombre_servidorprotegidoapp.sudominio.com; ssl_certificate /etc/letsencrypt/live/protectedapp.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/protectedapp.yourdomain.com/privkey.pem; # Esta ubicación sirve a todos los puntos finales de Vouch Proxy como /vp_in_a_path/$uri # incluyendo /vp_in_a_path/validate, /vp_in_a_path/login, /vp_in_a_path/logout, /vp_in_a_path/auth, /vp_in_a_path/auth/$STATE, etc. ubicación /vp_in_a_path { proxy_pass http://127.0.0.1:9090; # ¡no debe! tener una barra al final proxy_set_header Host $http_host; proxy_pass_request_body desactivado; proxy_set_header Longitud del contenido ""; # estos valores de retorno son utilizados por la llamada @error401 auth_request_set $auth_resp_jwt $upstream_http_x_vouch_jwt; auth_request_set $auth_resp_err $upstream_http_x_vouch_err; auth_request_set $auth_resp_failcount $upstream_http_x_vouch_failcount; } # si /vp_in_a_path/validate devuelve `401 no autorizado` entonces reenvía la solicitud al bloque error401 error_page 401 = @error401; ubicación @error401 { # redirigir a Vouch Proxy para iniciar sesión y regresar 302 https://protectedapp.yourdomain.com/vp_in_a_path/login?url=$scheme://$http_host$request_uri&vouch-failcount=$auth_resp_failcount&X-Vouch-Token=$auth_resp_jwt&error =$auth_resp_err; } ubicación / { auth_request /vp_in_a_path/validate; proxy_pass http://127.0.0.1:8080; # consulte la configuración de Nginx anterior para ver encabezados adicionales que se pueden configurar desde Vouch Proxy } }
Se pueden encontrar configuraciones adicionales de Nginx en el directorio de ejemplos.
Aquí hay una configuración mínima usando OAuth de Google...
VOUCH_DOMAINS=tudominio.com OAUTH_PROVIDER=google OAUTH_CLIENT_ID=1234 OAUTH_CLIENT_SECRET=secretsecreto OAUTH_CALLBACK_URL=https://vouch.tudominio.com/auth ./vouch-proxy
Los nombres de las variables ambientales están documentados en config/config.yml_example
Todas las listas con múltiples valores deben estar separadas por comas: VOUCH_DOMAINS="yourdomain.com,yourotherdomain.com"
La variable VOUCH_CONFIG
se puede utilizar para establecer una ubicación alternativa para el archivo de configuración. VOUCH_ROOT
se puede utilizar para configurar un directorio raíz alternativo para que Vouch Proxy busque archivos de soporte.
Todos los elementos de configuración de Vouch Proxy están documentados en config/config.yml_example
Almacenamiento en caché de la respuesta Vouch Proxy /validate
en Nginx
Manejo de solicitudes OPTIONS
al proteger una API con Vouch Proxy
Validación por parte del equipo de GitHub o de la organización de GitHub
Ejecutar VP en una Raspberry Pi usando la imagen de Docker basada en ARM
Entrada posterior a la arquitectura de Kubernetes
configure HTTP_PROXY
para transmitir solicitudes de IdP de Vouch Proxy a través de un servidor proxy saliente
Proxy inverso para los servicios Google Cloud Run
Habilite TLS nativo en Vouch Proxy
Soporte para FreeBSD
inicio systemd
de Vouch Proxy
Usar Node.js en lugar de Nginx para enrutar solicitudes
Desarrollar una aplicación de página única (SPA) mientras consume una API protegida por VP
Integre Vouch Proxy en una aplicación del lado del servidor para User Authn y Authz
Filtrar por dirección IP antes de la validación de VP utilizando satisfy any;
Por favor ayúdanos a ampliar esta lista.
Con Vouch Proxy puedes solicitar varios scopes
(estándar y personalizado) para obtener más información sobre el usuario o acceder a las API del proveedor. Internamente, Vouch Proxy lanza solicitudes a user_info_url
después de una autenticación exitosa. Las claims
requeridas se extraen de la respuesta del proveedor y se almacenan en la cookie VP.
La cookie VP puede dividirse en varias cookies para adaptarse a los límites de tamaño de las cookies del navegador. Pero si lo necesitas, lo necesitas. Las cookies y encabezados grandes requieren que Nginx esté configurado con buffers más grandes. Consulte large_client_header_buffers y proxy_buffer_size para obtener más información.
scopes
y claims
en Vouch Proxy con NginxConfigure Vouch Proxy para Nginx y su IdP como de costumbre (Ver: Instalación y configuración)
Establezca los scope
necesarios en la sección oauth
de vouch-proxy config.yml
(configuración de ejemplo)
establezca idtoken: X-Vouch-IdP-IdToken
en la sección headers
del config.yml
de vouch-proxy
inicie sesión y llame al punto final /validate
en un navegador moderno
verifique el encabezado de respuesta para ver si hay un encabezado X-Vouch-IdP-IdToken
copie el valor del encabezado en el depurador en https://jwt.io/ y asegúrese de que las afirmaciones necesarias formen parte del jwt
si no es así, debe ajustar los scopes
en la sección oauth
de su config.yml
o reconfigurar su proveedor de oauth
Establezca los claims
necesarios en la sección header
de vouch-proxy config.yml
inicie sesión y llame al punto final /validate
en un navegador moderno
verifique los encabezados de respuesta para ver si tienen encabezados del formulario X-Vouch-IdP-Claims-<ClaimName>
Si no están allí, borre las cookies y los datos almacenados en caché del navegador.
? Si todavía no están allí pero existen en el jwt (especialmente reclamos personalizados), puede haber un error.
elimine el idtoken: X-Vouch-IdP-IdToken
de la sección headers
del config.yml
de vouch-proxy si no lo necesita
Utilice auth_request_set
después de auth_request
dentro de la ubicación protegida en nginx server.conf
Consumir el reclamo (ejemplo de configuración de nginx)
ejecución de la ventana acoplable -d -p 9090:9090 --nombre proxy-garantía -v${PWD}/config:/config quay.io/vouch/vouch-proxy
o
ejecución de la ventana acoplable -d -p 9090:9090 --nombre proxy-garantía -e VOUCH_DOMAINS=tudominio.com -e OAUTH_PROVIDER=google -e OAUTH_CLIENT_ID=1234 -e OAUTH_CLIENT_SECRET=secretsecreto -e OAUTH_CALLBACK_URL=https://vouch.tudominio.com/auth quay.io/vouch/vouch-proxy
A partir de v0.36.0
el proceso de la ventana acoplable en el contenedor se ejecuta como vouch
de usuario con UID 999 y GID 999. Es posible que deba configurar los permisos de /config/config.yml
y /config/secret
para que correspondan y sean legibles para este usuario. o use docker run --user $UID:$GID ...
o tal vez cree el contenedor de Docker desde la fuente y use los ARG disponibles para UID y GID.
Las compilaciones de contenedores automatizadas para cada versión de Vouch Proxy están disponibles en quay.io. Cada lanzamiento produce...
un contenedor binario mínimo creado a partir de Dockerfile
quay.io/vouch/vouch-proxy:latest
quay.io/vouch/vouch-proxy:xyz
como quay.io/vouch/vouch-proxy:0.28.0
un contenedor alpine
construido a partir de Dockerfile.alpine
quay.io/vouch/vouch-proxy:alpine-latest
quay.io/vouch/vouch-proxy:alpine-xyz
Las imágenes arm
de Vouch Proxy están disponibles en Docker Hub
voucher/vouch-proxy:latest-arm
Si está utilizando Kubernetes con nginx-ingress, puede configurar su ingreso con las siguientes anotaciones (tenga en cuenta que se cita la anotación auth-signin
):
nginx.ingress.kubernetes.io/auth-signin: "https://vouch.yourdomain.com/login?url=$scheme://$http_host$request_uri&vouch-failcount=$auth_resp_failcount&X-Vouch-Token=$auth_resp_jwt&error=$ auth_resp_err" nginx.ingress.kubernetes.io/auth-url: https://vouch.yourdomain.com/validate nginx.ingress.kubernetes.io/auth-response-headers: Usuario-X-Vouch nginx.ingress.kubernetes.io/auth-snippet: | # estos valores de retorno son utilizados por la llamada @error401 auth_request_set $auth_resp_jwt $upstream_http_x_vouch_jwt; auth_request_set $auth_resp_err $upstream_http_x_vouch_err; auth_request_set $auth_resp_failcount $upstream_http_x_vouch_failcount; # cuando VP está alojado externamente en k8s, asegúrese de que el certificado SSL sea válido para evitar el riesgo MITM # proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt; # proxy_ssl_session_reuse activado; # proxy_ssl_verify_profundidad 2; # proxy_ssl_verify activado;
Los Helm Charts son mantenidos por punkle, martina-if y halkeye y están disponibles en https://github.com/vouch/helm-charts
./do.sh goget ./do.sh construir ./vouch-proxy
A partir de v0.29.0
todas las plantillas, activos estáticos y valores de configuración predeterminados en .defaults.yml
están integrados en el binario estático mediante directivas go:embed.
A partir de v0.11.0
se implementan controles adicionales para reducir la superficie de ataque de la redirección de URL.
La URL pasada...
debe comenzar con http
o https
debe tener una superposición de dominio con un dominio en la lista vouch.domains
o vouch.cookie.domain
(si alguno de ellos está configurado)
no puede tener un parámetro que incluya una URL para evitar ataques de encadenamiento de URL
El punto final Vouch Proxy /logout
acepta un parámetro url
en la cadena de consulta que se puede usar para redirigir 302
a un usuario al punto final de revocación de su proveedor OAuth original/IDP/OIDC.
https://vouch.oursites.com/logout?url=https://oauth2.googleapis.com/revoke
esta URL debe estar presente en el archivo de configuración en la lista vouch.post_logout_redirect_uris
# para evitar ataques de redireccionamiento, se deben especificar todas las URL redirigidas a /logout# la URL aún debe pasarse a Vouch Proxy como https://vouch.yourdomain.com/logout?url=${UNA DE LAS URL A CONTINUACIÓN}post_logout_redirect_uris : # página de inicio de sesión de tu aplicación - https://yourdomain.com/login # su punto de cierre de sesión de IdP # desde https://accounts.google.com/.well-known/openid-configuration - https://oauth2.googleapis.com/revoke # es posible que estés conectando en cadena con tu IdP - https://myorg.okta.com/oauth2/123serverid/v1/logout?post_logout_redirect_uri=http://myapp.yourdomain.com/login
Tenga en cuenta que su IdP probablemente tendrá su propia lista post_logout_redirect_uri
separada.
cerrar sesión en recursos..
Okta
Autenticación0
Lograr que las estrellas se alineen entre Nginx, Vouch Proxy y su IdP puede ser complicado. Queremos ayudarle a ponerse en marcha lo más rápido posible. El problema más común es...
Verifique que esté ejecutando Vouch Proxy y sus aplicaciones en un dominio común que pueda compartir cookies. Por ejemplo, vouch.yourdomain.com
y app.yourdomain.com
pueden compartir cookies en el dominio .yourdomain.com
. (No funcionará si intenta utilizar vouch.yourdomain.org
y app.yourdomain.net
).
Es posible que deba definir explícitamente el dominio en el que se debe configurar la cookie. Puede hacer esto en el archivo de configuración configurando la opción:
aval: cookie: # fuerza al dominio de la cookie a configurar el dominio: tudominio.com
Si continúa teniendo problemas, intente lo siguiente:
active vouch.testing: true
. Esto ralentizará el ciclo.
establezca vouch.logLevel: debug
.
el encabezado Host:
en la solicitud http, oauth.callback_url
y los vouch.domains
configurados deben estar alineados para que la cookie que transporta el JWT pueda colocarse correctamente en el navegador y luego devolverse en cada solicitud.
Ayuda pensar como una galleta .
una cookie se establece en un dominio. Si tiene siteA.yourdomain.com
y siteB.yourdomain.com
protegidos por Vouch Proxy, desea que la cookie de Vouch Proxy se establezca en .yourdomain.com
Si se autentica en vouch.yourdomain.com
dev.anythingelse.com
no podrá ver la cookie.
a menos que esté utilizando https, debe configurar vouch.cookie.secure: false
Las cookies están disponibles para todos los puertos de un dominio.
consulte los problemas que se han cerrado y que mencionan la redirección
Envíe un nuevo problema de la siguiente manera.
TLDR:
establecer vouch.testing: true
establecer vouch.logLevel: debug
realice dos viajes de ida y vuelta completos de ./vouch-proxy
capturando la salida.
inicio del vicepresidente
/validate
/login
- incluso si el error está aquí
/auth
/validate
- capturar todo
coloque todos sus registros y configuraciones en una gist
.
./do.sh bug_report
es tu amigo
Active vouch.testing: true
y configure vouch.logLevel: debug
.
utilice un gist u otro servicio de pegado como hasteb.in. NO PONGA SUS REGISTROS Y CONFIGURACIÓN EN LA EDICIÓN DE GITHUB . Usar un servicio de pegado es importante ya que mantendrá el espaciado y proporcionará números de línea y formato. Buscamos agujas en pajares con configuraciones con varias partes móviles, estas características ayudan considerablemente. Los servicios de pegado le ahorran tiempo y el nuestro y nos ayudan a ayudarle rápidamente. Es más probable que obtenga un buen soporte de nuestra parte de manera oportuna si sigue este consejo.
ejecute ./do.sh bug_report secretdomain.com secretpass [anothersecret..]
que creará una versión redactada de su configuración y registros eliminando cada una de esas cadenas
y siga las instrucciones al final para redactar su configuración de Nginx
todos esos van en esencia
luego abra una nueva edición en este repositorio
Se puede generar un informe de error desde un entorno acoplable utilizando la imagen quay.io/vouch/vouch-proxy:alpine
...
docker run --name vouch_proxy -v $PWD/config:/config -v $PWD/certs:/certs -it --rm --entrypoint /do.sh quay.io/vouch/vouch-proxy:alpine bug_report yourdomain.com anotherdomain.com someothersecret
¡Nos encantaría que contribuyeras! Consulte nuestras pautas de contribución para obtener más detalles.
OpenResty® es una plataforma web completa que integra el núcleo estándar de Nginx, LuaJIT, muchas bibliotecas Lua cuidadosamente escritas, muchos módulos Nginx de terceros de alta calidad y la mayoría de sus dependencias externas.
Puedes reemplazar nginx con OpenResty con bastante facilidad.
Con OpenResty y Lua es posible proporcionar autorización personalizada y avanzada en cualquier encabezado o comprobante de reclamo que se transmita.
OpenResty y las configuraciones para una variedad de escenarios están disponibles en el directorio de ejemplos.
Bob visita https://private.oursites.com
el proxy inverso de Nginx...
si /validate
regresa...
responda a Bob con una redirección 302 a https://vouch.oursites.com/login?url=https://private.oursites.com
200 OK, entonces ÉXITO permite que Bob pase
401 No autorizado entonces
recibe la solicitud de private.oursites.com de Bob
utiliza el módulo auth_request
configurado para la ruta /validate
/validate
está configurado para enviar solicitudes proxy_pass
al servicio de autenticación en https://vouch.oursites.com/validate
Proxy de garantía https://vouch.oursites.com/validate
devolver 401 NotAuthorized
a Nginx (que reenvía la solicitud para iniciar sesión)
devuelve 200 OK
a Nginx, lo que permitirá el acceso (bob no nota nada)
recibe la solicitud de private.oursites.com de Bob a través de Nginx proxy_pass
busca una cookie llamada "oursitesSSO" que contiene un JWT
si se encuentra la cookie y el JWT es válido
si NO se encuentra la cookie, o el JWT NO es válido
Primero se reenvía brevemente a Bob a https://vouch.oursites.com/login?url=https://private.oursites.com
borra la cookie llamada "oursitesSSO" si existe
genera un nonce y lo almacena en la variable de sesión $STATE
almacena la URL https://private.oursites.com
de la cadena de consulta en la variable de sesión $requestedURL
responder a Bob con una redirección 302 al formulario de inicio de sesión OAuth de Google, incluido el nonce $STATE
Bob inicia sesión en su cuenta de Google usando Oauth
después de iniciar sesión exitosamente
Google responde a Bob con una redirección 302 a https://vouch.oursites.com/auth?state=$STATE
Bob es reenviado a https://vouch.oursites.com/auth?state=$STATE
emita un JWT en forma de cookie llamada "oursitesSSO"
recupere la variable de sesión $requestedURL
y redirija 302 a https://private.oursites.com
si el nonce $STATE de la URL coincide con la variable de sesión "estado"
realizar una solicitud de "tercer tramo" a Google (servidor a servidor) para intercambiar el código OAuth por la información de usuario de Bob, incluida la dirección de correo electrónico [email protected]
si la dirección de correo electrónico coincide con el dominio oursites.com (lo hace)
Tenga en cuenta que, aparte de algunas redirecciones inofensivas, Bob solo ve https://private.oursites.com
y la pantalla de inicio de sesión de Google en su navegador. Si bien Vouch interactúa con el navegador de Bob varias veces, es solo para configurar cookies y, si las redirecciones 302 funcionan correctamente, Bob iniciará sesión rápidamente.
Una vez que se configura el JWT, Bob estará autorizado para todos los demás sitios que estén configurados para usar https://vouch.oursites.com/validate
desde el módulo auth_request
Nginx.
La próxima vez que Bob sea reenviado a Google para iniciar sesión, dado que ya autorizó la aplicación Vouch Proxy OAuth, Google inmediatamente lo reenvía, configura la cookie y lo envía de regreso. En algunos navegadores como Chrome, es posible que Bob ni siquiera se dé cuenta de que inició sesión con Vouch Proxy.