Чтобы создать такое же OAuth приложение, нужно создать новое OAuth App на Github.
-
Склонируйте репозиторий на вашу локальную машину:
git clone https://github.com/Jhnvlglmlbrt/oauth
-
Перейдите в директорию проекта:
cd oauth
-
Установить зависимости:
go get
-
Нужно создать свой .env файл в /oauth/ :
CLIENT_ID=xxxxxxxxxxxxxxxxxxxx CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-
Убедитесь, что в случае, если создавали свои url, что поменяли их в коде.
-
Запустите код:
cd cmd && go run main.go
-
Клиент (фронтенд) переходит на маршрут, предназначенный для входа через GitHub - '/login/github'.
-
Когда этот маршрут запрашивается у сервера (GET-запрос к серверу), сервер перенаправляет пользователя на специальный маршрут на github.com, где он может авторизовать приложение.
Маршрут имеет следующий вид:
Здесь пользователь входит в GitHub (если ещё не вошел) и на следующей странице разрешает приложению доступ к своей информации.
- После того как пользователь разрешил, API GitHub отправляет запрос на redirect_uri, указанный в предыдущем запросе (/login/github/redirect в данном случае).
В этом запросе мы получаем authorization code в качестве параметра запроса. Мы извлекаем этот code. Он будет использоваться позже для получения данных пользователя.
- Затем мы отправляем POST-запрос к конечной точке https://github.com/login/oauth/access_token.
В качестве параметров запроса мы отправляем наш идентификатор клиента (client id) и клиентский секрет (client secret), которые мы создали в нашей учетной записи GitHub, а также код, который мы получили на предыдущем этапе. На этом этапе мы можем быть уверены, что возвращенные данные будут действительными, так как они поступают непосредственно от GitHub.
- Вышеуказанный запрос возвращает ответ следующего вида: access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&token_type=bearer.
Сервер должен извлечь access_token из этого ответа и использовать его для финального запроса на получение данных.
-
Теперь сервер отправляет GET-запрос к конечной точке https://api.github.com/user. С заголовком авторизации, например: Authorization: token e72e16c7e42f292c6912e7710c838347ae178b4a.
-
Ответ на этот запрос - это данные пользователя.