{"id":31646788,"url":"https://github.com/jhnvlglmlbrt/oauth","last_synced_at":"2025-10-07T05:56:09.034Z","repository":{"id":194300845,"uuid":"690433685","full_name":"Jhnvlglmlbrt/oauth","owner":"Jhnvlglmlbrt","description":"OAuth используя Github","archived":false,"fork":false,"pushed_at":"2023-09-27T08:51:20.000Z","size":164,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-01T00:29:47.297Z","etag":null,"topics":["api","github-api","oauth2"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Jhnvlglmlbrt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-09-12T07:29:29.000Z","updated_at":"2023-09-12T19:49:31.000Z","dependencies_parsed_at":"2023-09-27T14:39:30.750Z","dependency_job_id":null,"html_url":"https://github.com/Jhnvlglmlbrt/oauth","commit_stats":null,"previous_names":["jhnvlglmlbrt/oauth"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Jhnvlglmlbrt/oauth","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jhnvlglmlbrt%2Foauth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jhnvlglmlbrt%2Foauth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jhnvlglmlbrt%2Foauth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jhnvlglmlbrt%2Foauth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Jhnvlglmlbrt","download_url":"https://codeload.github.com/Jhnvlglmlbrt/oauth/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jhnvlglmlbrt%2Foauth/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278728316,"owners_count":26035412,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","github-api","oauth2"],"created_at":"2025-10-07T05:56:06.540Z","updated_at":"2025-10-07T05:56:09.027Z","avatar_url":"https://github.com/Jhnvlglmlbrt.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\r\n# Использования Github для OAuth\r\n\r\n***\r\n### Требования\r\n\r\nЧтобы создать такое же OAuth приложение, нужно создать новое OAuth App на Github. \r\n\r\n![APP!](images/app.png)\r\n\r\n***\r\n\r\n1. Склонируйте репозиторий на вашу локальную машину:\r\n\r\n   ```bash\r\n   git clone https://github.com/Jhnvlglmlbrt/oauth\r\n\r\n2. Перейдите в директорию проекта:\r\n\r\n   ```bash\r\n   cd oauth\r\n\r\n3. Установить зависимости:\r\n    \r\n    ```bash\r\n    go get \r\n\r\n4. Нужно создать свой .env файл в /oauth/ :\r\n\r\n    ```bash\r\n    CLIENT_ID=xxxxxxxxxxxxxxxxxxxx\r\n    CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n\r\n5. Убедитесь, что в случае, если создавали свои url, что поменяли их в коде.\r\n\r\n6. Запустите код: \r\n\r\n    ```bash\r\n    cd cmd \u0026\u0026 go run main.go\r\n\r\n***\r\n### Структура приложения\r\n\r\n![DIAG!](images/diag.png)\r\n\r\n1. Клиент (фронтенд) переходит на маршрут, предназначенный для входа через GitHub - '/login/github'.\r\n\r\n2. Когда этот маршрут запрашивается у сервера (GET-запрос к серверу), сервер перенаправляет пользователя на специальный маршрут на github.com, где он может авторизовать приложение.\r\n\r\nМаршрут имеет следующий вид: \r\n\r\nhttps://github.com/login/oauth/authorize?client_id=GITHUBCLIENTID\u0026redirect_uri=/login/github/callback. \r\n\r\nЗдесь пользователь входит в GitHub (если ещё не вошел) и на следующей странице разрешает приложению доступ к своей информации.\r\n\r\n3. После того как пользователь разрешил, API GitHub отправляет запрос на redirect_uri, указанный в предыдущем запросе (/login/github/redirect в данном случае). \r\n\r\nВ этом запросе мы получаем authorization code в качестве параметра запроса. Мы извлекаем этот code. Он будет использоваться позже для получения данных пользователя.\r\n\r\n4. Затем мы отправляем POST-запрос к конечной точке https://github.com/login/oauth/access_token. \r\n\r\nВ качестве параметров запроса мы отправляем наш идентификатор клиента (client id) и клиентский секрет (client secret), которые мы создали в нашей учетной записи GitHub, а также код, который мы получили на предыдущем этапе. На этом этапе мы можем быть уверены, что возвращенные данные будут действительными, так как они поступают непосредственно от GitHub.\r\n\r\n5. Вышеуказанный запрос возвращает ответ следующего вида: access_token=e72e16c7e42f292c6912e7710c838347ae178b4a\u0026token_type=bearer. \r\n\r\nСервер должен извлечь access_token из этого ответа и использовать его для финального запроса на получение данных.\r\n\r\n6. Теперь сервер отправляет GET-запрос к конечной точке https://api.github.com/user. С заголовком авторизации, например: Authorization: token e72e16c7e42f292c6912e7710c838347ae178b4a.\r\n\r\n7. Ответ на этот запрос - это данные пользователя. \r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhnvlglmlbrt%2Foauth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjhnvlglmlbrt%2Foauth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhnvlglmlbrt%2Foauth/lists"}