Решение единого входа для Nginx с использованием модуля auth_request. Vouch Proxy может защитить все ваши веб-сайты одновременно.
Vouch Proxy поддерживает множество провайдеров входа OAuth и OIDC и может обеспечить аутентификацию для...
GitHub
GitHub предприятие
ИндиАут
Окта
Слабый
ADFS
Azure AD
Алибаба / Алиюн иДаас
AWS Когнито
Твич
Раздор
SecureAuth
Гитеа
Плащ-ключ
Серверная библиотека OAuth2 для PHP
ГлавнаяПомощник
OpenStax
Ори Гидра
Следующее облако
большинство других поставщиков OpenID Connect (OIDC)
Пожалуйста, сообщите нам, когда вы развернули Vouch Proxy с предпочитаемым вами поставщиком удостоверений или библиотекой, чтобы мы могли обновить список.
Если Vouch работает на том же хосте, что и обратный прокси-сервер Nginx, время ответа от конечной точки /validate
до Nginx должно быть менее 1 мс .
Что делает Vouch Proxy...
Установка и настройка
Поручиться прокси "в пути"
Дополнительные конфигурации Nginx
Конфигурация через переменные среды
Советы, подсказки и расширенные настройки
Области применения и претензии
Запуск из Докера
Вход в Kubernetes Nginx
Компиляция из исходного кода и запуск двоичного файла
Перенаправление конечной точки /login и /logout
Устранение неполадок, поддержка и запросы на добавление новых функций (прочитайте это, прежде чем отправлять сообщение о проблеме на GitHub)
Я получаю бесконечный цикл перенаправления, который возвращает меня к моему IdP (Google/Okta/GitHub/...).
Хорошо, я рассмотрел проблемы и попробовал кое-что в своих конфигурациях, но все равно не работает.
Участие в прокси-сервере Vouch
Расширенная авторизация с использованием OpenResty
Последовательность входа и аутентификации с использованием Google Oauth
Vouch Proxy (VP) заставляет посетителей входить в систему и проходить аутентификацию с помощью IdP (например, одной из служб, перечисленных выше), прежде чем разрешить им доступ к веб-сайту.
VP также можно использовать в качестве решения единого входа (SSO) для защиты всех веб-приложений в одном домене.
После входа посетителя в систему Vouch Proxy предоставляет доступ к защищенным веб-сайтам в течение нескольких часов. Каждый запрос проверяется VP на предмет его достоверности.
VP может отправлять адрес электронной почты, имя и другую информацию посетителя, которую предоставляет IdP (включая токены доступа), в веб-приложение в виде заголовков HTTP. VP можно использовать для полной замены управления пользователями приложений.
Vouch Proxy полагается на возможность совместного использования файлов cookie между сервером Vouch Proxy и приложением, которое он защищает. Обычно это делается путем запуска Vouch на поддомене, например vouch.yourdomain.com
с приложениями, работающими на app1.yourdomain.com
и app2.yourdomain.com
. Защищенным доменом является .yourdomain.com
, и файл cookie Vouch Proxy должен быть установлен в этом домене, установив для vouch.domains включение yourdomain.com
или иногда установив для vouch.cookie.domain значение yourdomain.com
.
cp ./config/config.yml_example_$OAUTH_PROVIDER ./config/config.yml
создайте учетные данные OAuth для Vouch Proxy в Google или GitHub и т. д.
обязательно направьте URL-адрес обратного вызова на конечную точку Vouch Proxy /auth
настроить Нгинкс...
Следующая конфигурация Nginx предполагает..
Nginx, vouch.yourdomain.com
и protectedapp.yourdomain.com
работают на одном сервере.
оба домена обслуживаются как https
и имеют действительные сертификаты (если нет, измените на listen 80
и установите для vouch.cookie.secure значение false
)
сервер {прослушивание 443 SSL http2; имя_сервера protectedapp.вашдомен.com; корень /var/www/html/; ssl_certificate /etc/letsencrypt/live/protectedapp.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/protectedapp.yourdomain.com/privkey.pem; # отправить все запросы в конечную точку `/validate` для авторизации auth_request /validate; location = /validate { # пересылаем запрос /validate на Vouch Proxy proxy_pass http://127.0.0.1:9090/validate; # обязательно передайте исходный заголовок хоста proxy_set_header Host $http_host; # Прокси-сервер Vouch действует только на заголовки запросов proxy_pass_request_body off; proxy_set_header Content-Length ""; # при необходимости добавьте X-Vouch-User, возвращенный Vouch Proxy, вместе с запросом auth_request_set $auth_resp_x_vouch_user $upstream_http_x_vouch_user; # при необходимости добавьте пользовательские заявки X-Vouch-IdP-Claims-*, которые вы отслеживаете # 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; # при желании добавьте X-Vouch-IdP-AccessToken или 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; # эти возвращаемые значения используются вызовом @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 может работать за тем же обратным прокси-сервером Nginx # может потребоваться соответствие именованию "восходящего" сервера # proxy_pass http://vouch.yourdomain.com/validate; # proxy_set_header Хост $http_host; } # если проверка возвращает `401 не авторизован`, то пересылаем запрос в блок error401 error_page 401 = @error401; location @error401 { # перенаправление на прокси-сервер Vouch для возврата входа 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; # вы обычно *хотите* перенаправить на Vouch, работающий с той же конфигурацией Nginx, защищенной https # но для начала вы можете просто перенаправить конечного пользователя на порт, на котором работает 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; } location / { # пересылать авторизованные запросы в вашу службу protectedapp.yourdomain.com proxy_pass http://127.0.0.1:8080; # вам может потребоваться установить эти переменные в этом блоке согласно 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; # установить заголовок пользователя (обычно адрес электронной почты) proxy_set_header X-Vouch-User $auth_resp_x_vouch_user; # при необходимости передайте любые пользовательские утверждения, которые вы отслеживаете # 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; # опционально передать токен доступа или 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; } }
Если Vouch настроен за тем же обратным прокси-сервером nginx (возможно, чтобы вы могли настроить SSL), обязательно передайте заголовок Host
правильно, иначе файл cookie JWT не сможет быть установлен в домене.
сервер {прослушивание 443 SSL http2; имя_сервера vouch.вашдомен.com; ssl_certificate /etc/letsencrypt/live/vouch.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/vouch.yourdomain.com/privkey.pem; местоположение / { proxy_pass http://127.0.0.1:9090; # обязательно передайте исходный заголовок хоста proxy_set_header Host $http_host; } }
Начиная с v0.33.0
прокси-сервер Vouch можно обслуживать в местоположении (пути) Nginx, настроив vouch.document_root: /vp_in_a_path
Это позволяет избежать необходимости настраивать отдельный домен для Vouch Proxy, например vouch.yourdomain.com
. Например, вход вице-президента будет осуществляться с https://protectedapp.yourdomain.com/vp_in_a_path/login
сервер {прослушивание 443 SSL http2; имя_сервера protectedapp.вашдомен.com; ssl_certificate /etc/letsencrypt/live/protectedapp.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/protectedapp.yourdomain.com/privkey.pem; # Это местоположение обслуживает все конечные точки прокси-сервера Vouch как /vp_in_a_path/$uri # включая /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 и т. д. location /vp_in_a_path { proxy_pass http://127.0.0.1:9090; # нельзя! иметь косую черту в конце proxy_set_header Host $http_host; proxy_pass_request_body выключен; proxy_set_header Content-Length ""; # эти возвращаемые значения используются вызовом @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; } # если /vp_in_a_path/validate возвращает `401 не авторизован`, то перенаправьте запрос в блок error401 error_page 401 = @error401; location @error401 { # перенаправление на прокси-сервер Vouch для возврата входа 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; } Местоположение / { auth_request /vp_in_a_path/validate; proxy_pass http://127.0.0.1:8080; # см. конфигурацию Nginx выше для получения дополнительных заголовков, которые можно установить с помощью Vouch Proxy } }
Дополнительные конфигурации Nginx можно найти в каталоге примеров.
Вот минимальная настройка с использованием Google OAuth...
VOUCH_DOMAINS=вашдомен.com OAUTH_PROVIDER=Google OAUTH_CLIENT_ID=1234 OAUTH_CLIENT_SECRET=секретный секрет OAUTH_CALLBACK_URL=https://vouch.yourdomain.com/auth ./vouch-прокси
Имена переменных среды описаны в config/config.yml_example.
Все списки с несколькими значениями должны быть разделены запятыми: VOUCH_DOMAINS="yourdomain.com,yourotherdomain.com"
Переменную VOUCH_CONFIG
можно использовать для установки альтернативного местоположения файла конфигурации. VOUCH_ROOT
можно использовать для установки альтернативного корневого каталога для Vouch Proxy для поиска файлов поддержки.
Все элементы конфигурации Vouch Proxy задокументированы в config/config.yml_example.
Кэширование ответа Vouch Proxy /validate
в Nginx
Обработка запросов OPTIONS
при защите API с помощью Vouch Proxy
Проверка командой GitHub или организацией GitHub.
Запуск VP на Raspberry Pi с использованием образа Docker на базе ARM
Вход в архитектуру Kubernetes
установите HTTP_PROXY
для ретрансляции запросов Vouch Proxy IdP через исходящий прокси-сервер
Обратный прокси-сервер для сервисов Google Cloud Run
Включите собственный TLS в Vouch Proxy
Поддержка FreeBSD
systemd
запуск Vouch Proxy
Использование Node.js вместо Nginx для маршрутизации запросов
Разработка одностраничного приложения (SPA) с использованием API, защищенного VP.
Интегрируйте Vouch Proxy в серверное приложение для аутентификации пользователей и аутентификации.
Фильтрация по IP-адресу перед проверкой VP с помощью функции satisfy any;
Пожалуйста, помогите нам расширить этот список.
С помощью Vouch Proxy вы можете запрашивать различные scopes
(стандартные и пользовательские), чтобы получить дополнительную информацию о пользователе или получить доступ к API-интерфейсам провайдера. Внутренне Vouch Proxy запускает запросы к user_info_url
после успешной аутентификации. Требуемые claims
извлекаются из ответа поставщика и сохраняются в файле cookie VP.
Файл cookie VP может быть разделен на несколько файлов cookie для соблюдения ограничений на размер файлов cookie браузера. Но если оно вам нужно, оно вам нужно. Большие файлы cookie и заголовки требуют настройки Nginx с использованием буферов большего размера. Дополнительные сведения см. в разделах big_client_header_buffers и proxy_buffer_size.
scopes
настройки и claims
в Vouch Proxy с NginxНастройте прокси-сервер Vouch для Nginx и вашего IdP как обычно (см. Установка и настройка).
Установите необходимые scope
в разделе oauth
файла vouch-proxy config.yml
(пример конфигурации).
установите idtoken: X-Vouch-IdP-IdToken
в разделе headers
файла config.yml
vouch-proxy
войдите в систему и вызовите конечную точку /validate
в современном браузере
проверьте заголовок ответа на наличие заголовка X-Vouch-IdP-IdToken
скопируйте значение заголовка в отладчик по адресу https://jwt.io/ и убедитесь, что необходимые утверждения являются частью jwt
если это не так, вам необходимо настроить scopes
в разделе oauth
вашего config.yml
или перенастроить поставщика oauth.
Установите необходимые claims
в разделе header
vouch-proxy config.yml
войдите в систему и вызовите конечную точку /validate
в современном браузере
проверьте заголовки ответов на наличие заголовков вида X-Vouch-IdP-Claims-<ClaimName>
Если их нет, очистите файлы cookie и кэшированные данные браузера.
? Если их все еще нет, но они существуют в jwt (особенно пользовательские утверждения), возможно, это ошибка.
удалите idtoken: X-Vouch-IdP-IdToken
из раздела headers
config.yml
vouch-proxy, если он вам не нужен
Используйте auth_request_set
после auth_request
внутри защищенного места в nginx server.conf
Обработать заявку (пример конфигурации nginx)
докер запустить -d -п 9090:9090 --name ручающийся-прокси -v ${PWD}/config:/config quay.io/vouch/vouch-proxy
или
докер запустить -d -п 9090:9090 --name ручающийся-прокси -e VOUCH_DOMAINS=вашдомен.com -e OAUTH_PROVIDER=google -e OAUTH_CLIENT_ID=1234 -e OAUTH_CLIENT_SECRET=секретный секрет -e OAUTH_CALLBACK_URL=https://vouch.yourdomain.com/auth quay.io/vouch/vouch-proxy
Начиная с v0.36.0
процесс докера в контейнере запускается от vouch
пользователя с UID 999 и GID 999. Возможно, вам потребуется установить разрешения /config/config.yml
и /config/secret
, чтобы они были доступны для чтения этому пользователю. или иным образом используйте docker run --user $UID:$GID ...
или, возможно, создайте контейнер докеров из исходного кода и используйте доступные ARG для UID и GID.
Автоматические сборки контейнеров для каждой версии Vouch Proxy доступны на сайте quay.io. Каждый выпуск производит...
минимальный двоичный контейнер Go, созданный на основе Dockerfile
quay.io/vouch/vouch-proxy:latest
quay.io/vouch/vouch-proxy:xyz
например quay.io/vouch/vouch-proxy:0.28.0
контейнер на основе alpine
, созданный на основе Dockerfile.alpine
quay.io/vouch/vouch-proxy:alpine-latest
quay.io/vouch/vouch-proxy:alpine-xyz
Образы arm
Vouch Proxy доступны в Docker Hub.
voucher/vouch-proxy:latest-arm
Если вы используете Kubernetes с nginx-ingress, вы можете настроить вход с помощью следующих аннотаций (обратите внимание на цитирование аннотации 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: X-Vouch-User nginx.ingress.kubernetes.io/auth-snippet: | # эти возвращаемые значения используются вызовом @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; # когда VP размещен снаружи k8s, убедитесь, что сертификат SSL действителен, чтобы избежать риска MITM # proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt; # proxy_ssl_session_reuse включен; # proxy_ssl_verify_глубина 2; # proxy_ssl_verify включен;
Диаграммы Helm поддерживаются punkle, martina-if и halkeye и доступны по адресу https://github.com/vouch/helm-charts.
./do.sh goget ./do.sh сборка ./vouch-прокси
Начиная с v0.29.0
все шаблоны, статические ресурсы и настройки по умолчанию в .defaults.yml
встроены в статический двоичный файл с помощью директив go:embed.
Начиная с v0.11.0
предусмотрены дополнительные проверки для уменьшения поверхности атаки при перенаправлении URL-адресов.
Переданный URL...
должен начинаться с http
или https
домен должен перекрываться либо с доменом из списка vouch.domains
, либо vouch.cookie.domain
(если любой из них настроен)
не может иметь параметр, включающий URL-адрес, для предотвращения атак с использованием цепочки URL-адресов.
Конечная точка Vouch Proxy /logout
принимает параметр url
в строке запроса, который можно использовать для 302
перенаправления пользователя на revocacy_endpoint вашего исходного провайдера OAuth/провайдера IDP/OIDC.
https://vouch.oursites.com/logout?url=https://oauth2.googleapis.com/revoke
этот URL-адрес должен присутствовать в файле конфигурации в списке vouch.post_logout_redirect_uris
# чтобы предотвратить атаки с перенаправлением, необходимо указать все перенаправленные URL-адреса на /logout# URL-адрес все равно должен передаваться в Vouch Proxy как https://vouch.yourdomain.com/logout?url=${ОДИН ИЗ URL-адресов НИЖЕ}post_logout_redirect_uris : # страница входа в ваше приложение - https://yourdomain.com/login # точка выхода из вашего IdP # из https://accounts.google.com/.well-known/openid-configuration - https://oauth2.googleapis.com/revoke # возможно, вы подключены к своему IdP последовательно. - https://myorg.okta.com/oauth2/123serverid/v1/logout?post_logout_redirect_uri=http://myapp.yourdomain.com/login
Обратите внимание, что ваш поставщик удостоверений личности, скорее всего, будет иметь собственный отдельный список post_logout_redirect_uri
.
выход из ресурсов..
Окта
Авторизация0
Добиться совпадения звезд между Nginx, Vouch Proxy и вашим IdP может быть непросто. Мы хотим помочь вам начать работу как можно быстрее. Самая распространенная проблема..
Дважды проверьте, используете ли вы Vouch Proxy и ваши приложения в общем домене, который может использовать файлы cookie. Например, vouch.yourdomain.com
и app.yourdomain.com
могут использовать файлы cookie в домене .yourdomain.com
. (Это не сработает, если вы пытаетесь использовать vouch.yourdomain.org
и app.yourdomain.net
.)
Возможно, вам придется явно указать домен, на котором должен быть установлен файл cookie. Вы можете сделать это в файле конфигурации, установив опцию:
ручаюсь: cookie: # заставить домен файла cookie установить домен: yourdomain.com
Если проблемы по-прежнему возникают, попробуйте следующее:
включите vouch.testing: true
. Это замедлит цикл.
установите vouch.logLevel: debug
.
заголовок Host:
в HTTP-запросе, oauth.callback_url
и настроенные vouch.domains
должны быть согласованы, чтобы файл cookie, содержащий JWT, мог быть правильно размещен в браузере и затем возвращен при каждом запросе.
это помогает думать как печенье .
файл cookie устанавливается в домен. Если у вас есть siteA.yourdomain.com
и siteB.yourdomain.com
защищенные прокси-сервером Vouch, вы хотите, чтобы файл cookie Vouch Proxy был установлен в .yourdomain.com
если вы пройдете аутентификацию на vouch.yourdomain.com
dev.anythingelse.com
не сможет увидеть файл cookie.
если вы не используете https, вам следует установить vouch.cookie.secure: false
файлы cookie доступны для всех портов домена
пожалуйста, просмотрите закрытые проблемы, в которых упоминается перенаправление
Пожалуйста, отправьте новый выпуск следующим образом.
TLDR:
установите vouch.testing: true
установите vouch.logLevel: debug
провести два полных обхода ./vouch-proxy
, захватив выходные данные.
Вице-президент стартапа
/validate
/login
— даже если ошибка здесь
/auth
/validate
— зафиксировать все
поместите все свои журналы и настройки в gist
.
./do.sh bug_report
— ваш друг
включите vouch.testing: true
и установите vouch.logLevel: debug
.
используйте gist или другой сервис вставки, например hasteb.in. НЕ ПОМЕЩАЙТЕ СВОИ ЖУРНАЛЫ И КОНФИГУРАЦИИ В ВЫДАЧУ GITHUB . Использование службы вставки важно, поскольку она сохраняет интервалы и обеспечивает номера строк и форматирование. Мы ищем иголки в стогах сена с помощью установок с несколькими движущимися частями, эти функции очень помогают. Услуги вставки экономят ваше и наше время и помогают нам быстро вам помочь. Если вы последуете этому совету, у вас больше шансов получить от нас хорошую и своевременную поддержку.
запустите ./do.sh bug_report secretdomain.com secretpass [anothersecret..]
, который создаст отредактированную версию вашей конфигурации и зарегистрирует удаление каждой из этих строк.
и следуйте инструкциям в конце, чтобы отредактировать конфигурацию Nginx.
все это входит в суть
затем откройте новую задачу в этом репозитории
Отчет об ошибке можно создать из среды докера, используя образ 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
Мы будем рады, если вы внесете свой вклад! Подробную информацию можно найти в наших правилах внесения взносов.
OpenResty® — это полноценная веб-платформа, которая объединяет стандартное ядро Nginx, LuaJIT, множество тщательно написанных библиотек Lua, множество высококачественных сторонних модулей Nginx и большинство их внешних зависимостей.
Вы можете довольно легко заменить nginx на OpenResty.
С помощью OpenResty и Lua можно обеспечить индивидуальную и расширенную авторизацию для любого заголовка или передаваемого подтверждения претензий.
OpenResty и конфигурации для различных сценариев доступны в каталоге примеров.
Боб посещает https://private.oursites.com
обратный прокси-сервер Nginx...
если /validate
возвращает...
ответьте Бобу, перенаправив 302 на https://vouch.oursites.com/login?url=https://private.oursites.com
200 ОК, тогда УСПЕХ позволит Бобу пройти
401 NotAuthorized тогда
получает запрос на Private.oursites.com от Боба
использует модуль auth_request
, настроенный для пути /validate
/validate
настроен на передачу запросов proxy_pass
службе аутентификации по адресу https://vouch.oursites.com/validate
Гарантировать прокси https://vouch.oursites.com/validate
вернуть 401 NotAuthorized
в Nginx (который перенаправляет запрос на вход в систему)
возвращает 200 OK
в Nginx, что разрешает доступ (Боб ничего не замечает)
получает запрос на Private.oursites.com от Боба через Nginx proxy_pass
ищет файл cookie с именем «oursitesSSO», содержащий JWT.
если файл cookie найден и JWT действителен
если файл cookie НЕ найден или JWT НЕ действителен
Боб сначала ненадолго перенаправляется на https://vouch.oursites.com/login?url=https://private.oursites.com
удаляет файл cookie с именем «oursitesSSO», если он существует.
генерирует nonce и сохраняет его в переменной сеанса $STATE
сохраняет URL-адрес https://private.oursites.com
из строки запроса в переменной сеанса $requestedURL
ответьте Бобу, перенаправив 302 на форму входа в систему OAuth Google, включая одноразовый номер $STATE
Боб входит в свою учетную запись Google, используя Oauth.
после успешного входа в систему
Google отвечает Бобу перенаправлением 302 на https://vouch.oursites.com/auth?state=$STATE
Боб перенаправляется на https://vouch.oursites.com/auth?state=$STATE
выдайте bob JWT в виде файла cookie с именем «oursitesSSO».
получить переменную сеанса $requestedURL
и 302 перенаправить bob обратно на https://private.oursites.com
если одноразовый номер $STATE из URL-адреса соответствует переменной сеанса «state»
сделать «третью ногу» запрос Google (от сервера к серверу) для обмена кода OAuth на информацию пользователя Боба, включая адрес электронной почты [email protected]
если адрес электронной почты соответствует домену Oursites.com (так и есть)
Обратите внимание, что, за исключением некоторых безобидных перенаправлений, Боб видит в своем браузере только https://private.oursites.com
и экран входа в Google. Хотя Вуч несколько раз взаимодействует с браузером Боба, он просто устанавливает файлы cookie, и если перенаправление 302 работает правильно, Боб быстро войдет в систему.
После установки JWT Боб будет авторизован для всех других сайтов, которые настроены на использование https://vouch.oursites.com/validate
из модуля auth_request
Nginx.
В следующий раз, когда Боба перенаправят в Google для входа в систему, поскольку он уже авторизовал приложение Vouch Proxy OAuth, Google немедленно перенаправит его обратно, установит файл cookie и отправит его в путь. В некоторых браузерах, таких как Chrome, Боб может даже не заметить, что он вошел в систему с помощью Vouch Proxy.