Автор оригинала: Oscar.
Миникуба Это простое в использовании, высокое распределение Kubernetes, которое можно запустить локально. Он супер полезен для разработки, тестирования и работы с Kubernetes локально. Однако, поскольку Minikube работает на местном уровне вместо поставщика облака, некоторые особенности, специфичные для поставщиков не работают из коробки. Более того, создание некоторых 3-го вечеринок, таких как OAUTH, может потребовать некоторого подстройки, чтобы заставить их работать локально. Я обсудим вызов с одним из таких услуг, Google Oauth и решение ему.
Google Oauth
Это, само по себе, не требует никакого введения, но вызов установки его на местное развитие в Миникубу делает. Прежде чем указывать на проблему, давайте быстро настроим простое приложение, которое использует Google Oauth для аутентификации. В духе полного раскрытия я также использовал этот проект как оправдание, чтобы попробовать Язык кристаллов программирования . Вы можете проверить код здесь Отказ Обзор Google Oauth процесс:
- Перенаправить пользователя для сервера Google Oauth 2.0. Сервер Oauth 2.0 аутентифицирует пользователя и получает согласие от пользователя для вашего приложения для доступа к данным пользователя
- Сервер Google Oauth 2.0 Google перенаправляет пользователя обратно к вашему приложению вместе с одним пользователем авторизации
- Обменять этот код авторизации для токена доступа
- Используйте токен доступа, чтобы позвонить Google API
Вот главный фрагмент кристаллического кода, который обрабатывает это
Давайте запустим приложение, чтобы подтвердить, что все хорошо на этом этапе. Если вы клонировали репо, обязательно получите Crystallang установлен и запустить Shards устанавливает
В папке REPO для установки зависимостей приложений. Чтобы начать приложение запустить
crystal run src/simple-auth.cr
Нажмите кнопку «Вход», чтобы попробовать поток аутентификации, после чего вы должны заканчиваться на странице с помощью своей фотографии и имени пользователя.
Обратите внимание, что вам нужно Создание учетных данных веб-приложений и экспортировать ID клиента и Client_Secret. как переменные среды. Я добавил start.sh
Сценарий, который вы можете обновить с значениями вашего идентификатора клиента и секрет. Затем вы можете начать приложение:
chmod +x start.sh ./start.sh
Теперь к проблеме
Для запросов веб-сервера Google Oauth требует списка всех URL-адресов обратного вызова.
Это путь в вашем приложении, что пользователи перенаправлены до последующей аутентификации с Google.
Для простых веб-приложений, указав скажем, localhost достаточно, но не так с докеризованными веб-приложениями. Чтобы понять это, давайте приступим к приложению нашего приложения и запустить его в Кубейнетах.
Следующие шаги предполагают, что у вас установлен докер и Minikube.
Давайте настроим Minikube, чтобы мы могли Повторно использовать встроенный демон Docker Minikube ; Это позволяет нам построить наш образ прямо в Docker Docker Minikube, а не на хост-машине.
eval $(minikube docker env)
Далее мы строим изображение
docker build — tag xovox/simple-auth:0.0.1 .
Затем мы создаем развертывание Kubernetes
kubectl run simple-auth --image=xovox/simple-auth --port=3000 --env="OAUTH_CLIENT_ID=[your client id here]" --env="OAUTH_CLIENT_SECRET=[your secret here]"
Это создает новое развертывание с именем Simple-Auth. Развертывание создает реплиз, который создает POD из указанного изображения. Поэтому все, что нам нужно сделать, это сказать это изображение, которое мы хотим запустить, и какой порт контейнер ожидает трафика. Далее мы подвергаем наше развертывание с помощью службы
kubectl expose deployment simple-auth --port=3000 --target-port=3000 --type=NodePort
Это раскрывает наш сервис на порту высокого уровня во всех узлах (по умолчанию до 30000-32767).
Теперь давайте оформием осмотрите наши усилия, посетив наше приложение в браузере. Minikube предоставляет удобную команду для Доступ к услугам Выставлены через порт узла: Minikube Service [Service-name]
minikube service simple-auth
Это открывает службу в браузере. Кроме того, вы можете добавить —Url иметь адрес сервиса, напечатанный на консоль.
Если мы попытаемся входить в систему сейчас, мы получаем ошибку, что ничто не работает на localhost.
Это правда, и если вы проверяете исходный код здесь Он ожидает, что Хозяин Переменная ENV, которая используется для создания URL-адреса обратного вызова и при отсутствии при условии, что и в этом случае, по умолчанию для localhost
Отказ Чтобы исправить это, давайте получим URL Minikube для сервиса Minikube Service Simple-Auth --url
и установите его как переменную env для развертывания.
URL для обслуживания на моей машине 192.168.99.100:30144
Отказ Обратите внимание, что это может отличаться на вашей машине.
Удалить развертывание
kubectl delete deployment simple-auth
Перераспределение предоставления переменной ENV
kubectl run simple-auth --image=xovox/simple-auth --port=3000 --env="HOST=192.168.99.100:30144" --env="OAUTH_CLIENT_ID=[your client id here]" --env="OAUTH_CLIENT_SECRET=[your secret here]"
Я включил Развертывание.yaml Script То, что мы могли бы использовать для применения наших изменений вместо всегда удаления и воссоздания развертывания. Используя это, мы Обновите Хозяин env переменная и выполнить:
kubectl apply -f minikube/deployment.yaml
Теперь у нас есть другая ошибка при попытке войти в систему, и это ошибка, которую мы собираемся решить.
Сначала очевидное решение было бы добавить URL-адрес сервиса к списку обратных URL вызовов ОАУТ, но среди многих неудовлетворенных с этим подходом больше всего сдерживает то, что, к сожалению, Google не доволен этим. Да, это нет нет к частным IPS. Больше, чтобы добавить IP в список ОАУТ приводит к ошибке:
Решение
Решение было бы настроить запись в нашу /etc/hosts Файл по маршруту запросы на статическое имя хоста, например, Simple-auth.me , к нашему кластеру. Давайте установим это
echo "$(minikube ip) simple-auth.me" | sudo tee -a /etc/hosts
Это добавляет сопоставление от Simple-auth.me к вашему Minikube IP в вашем /etc/hosts файл.
Затем установите вход на ваш Minikube Setup. Вы можете следовать процессу Изложил здесь Отказ
Вот файл входа
Мы должны в состоянии посетить Simple-auth.me и просмотреть страницу входа в систему. Наконец, давайте добавим Simple-auth.me на наш URL-адрес обратного вызова в консоли Google и обновите переменную хоста ENV для нашего развертывания.
Заключение
Эта настройка не исключает только Google Oauth. Это довольно полезно для любой 3-го вечеринки (OAUTH) службы, которая требует фиксированного адреса хоста в запросах вашего приложений.
Я включил сценарии развертывания для этого в репо. У вас есть еще одно предложение, для тестирования OAUTH локально? Lemme знают в комментариях.
Я изначально опубликовал этот пост на среднем
Оригинал: «https://www.codementor.io/@oskarr3/setting-up-google-oauth-on-minikube-5c9f9112x»