Когда я раньше использовал задачи Github для создания платформы для блогов, я изучал, как получить авторизацию Github и вызвать API. Позже был выбран более простой метод пароля учетной записи и токена. Однако некоторые читатели сообщают, что такая операция все еще немного хлопотна, а ввод пароля учетной записи на сторонней странице всегда кажется небезопасным. Позже, после исследований, я наконец нашел более элегантный способ приложения Github.
Что такое приложение Github
Чтобы ответить на этот вопрос, вы можете напрямую обратитьсяофициальная документациязаявления:
GitHub Apps are first-class actors within GitHub. A GitHub App acts on its own behalf, taking actions via the API directly using its own identity, which means you don't need to maintain a bot or service account as a separate user.
Простым переводом является то, что приложение Github может вызывать Github API с помощью информации аутентификации, предоставленной Github.
Внимательные читатели обнаружат, что Github также предоставляет что-то под названием «Приложение OAuth», которое очень похоже на приложение Github.фиксированныйа такжетолько чтение, пользователи могут только читать фиксированные данные и не могут изменять данные, в то время как приложение Github может почти получитьGithubВсе предоставляют функциональную компетентность, полномочия и приобретенные могут быть установлены на «Только чтение», «чтение-запись» и «запрещено», будет уполномочена для более тонкой гранулярности разрешений.
После получения разрешений на определенные операции мы можем использовать эти разрешения для создания независимого приложения, например, стороннего клиента Github и т. д. Это также практичность приложения Github.
Принцип стороннего входа
Как упоминалось выше, приложение Github может избавить пользователей от необходимости вводить пароль учетной записи или операцию токена на сторонней странице для завершения авторизации, так как же оно это делает? По сути, грубо говоря, это тоже метод входа по OAuth, но метод получения Token изменен с «ввода пользователем» на «предоставляется Github».
Ниже описан процесс этого метода входа в систему:
- Веб-сайт переходит на страницу авторизации Github.
- Страница авторизации Github спрашивает пользователя: «Разрешаете ли вы веб-сайту А получать следующие разрешения?» Пользователь нажимает «Разрешить», чтобы получить код авторизации.
- Страница авторизации Github перенаправляет обратно на веб-сайт A с кодом авторизации в URL-адресе.
- Веб-сайт A извлекает токен из Github с помощью кода авторизации в URL-адресе.
- Веб-сайт A использует этот токен для вызова Github API.
Чтобы завершить описанный выше процесс, вы должны сначала зарегистрировать приложение Github.
Зарегистрировать приложение Github
Войтидомашняя страница гитхаба, щелкните аватар пользователя, найдите «Настройки»/«Настройки разработчика»/«Приложения Github», а затем нажмите «Новое приложение Github», чтобы войти в интерфейс редактирования:
После заполнения имени (здесь SOMEONE:BLOG ), описания и URL-адреса домашней страницы по очереди ключ должен быть вUser authorization callback URL
Заполните адрес обратного вызова после получения авторизации, а затемPermissions
Он устанавливает некоторые возможности чтения и записи API, которые необходимо использовать. Если вы хотите, чтобы это приложение использовалось только вами, используйте стандартноеOnly on this account
, иначе выберитеAny account
и, наконец, нажмитеCreate Github App
Вот и все.
После успешной операции вы можете увидеть информацию об этом приложении:
Идентификатор клиента и секрет клиента — это идентификационные коды этого приложения, которые необходимо записать.
После регистрации приложения Github сторонний веб-сайт должен использовать идентификатор клиента приложения, чтобы найти Github для получения кода авторизации.
Получить код авторизации
Чтобы получить код авторизации, стороннему веб-сайту нужно только перенаправить страницу на страницу авторизации Github, которая должна содержать два параметра в URL-адресе, а именно идентификатор клиента и URL-адрес перенаправления.
const CLIENT_ID = 'app 的 client id'
const REDIRECT_URL = 'app 的 redirect_url'
location.href = `https://github.com/login/oauth/authorize?` +
`client_id=${CLIENT_ID}&redirect_uri=${REDIRECT_URL}`
После перехода Github спросит пользователя, разрешить ли этому приложению получать определенные разрешения:
После подтверждения пользователя он будет перенаправлен на указанный адрес обратного вызова с кодом авторизации:
В это время сторонняя страница (здесь localhost: 8080) получила код авторизации, и затем вам нужно использовать этот код авторизации, а также идентификатор клиента и секрет клиента приложения, чтобы выкупить токен.
Обмен токенов
Код для погашения токена выглядит следующим образом:
router.post('/oauth', async function (ctx, next) {
const { clientID = CLIENT_ID, clientSecret = CLIENT_SECRET, code } = ctx.request.body
const { status, data } = await axios({
method: 'post',
url: 'http://github.com/login/oauth/access_token?' +
`client_id=${clientID}&` +
`client_secret=${clientSecret}&` +
`code=${code}`,
headers: {
accept: 'application/json'
}
}).catch(e => e.response)
ctx.body = { status, data }
})
Из-за междоменных ограничений эта часть кода должна пройтиСерверРеализация, другими словами, после того, как сайт А получит код авторизации, его нужно отправить на сервер, а сервер получит Токен и затем вернет его сайту А.
После того, как веб-сайт A получит токен, возвращенный сервером, его можно использовать при вызове Github API, установив заголовок:
'Authorization': `Bearer ${Token}`
Пока что в основном все в порядке, но все еще остается большая проблема, то есть данные, полученные текущим токеном, доступны «только для чтения» и не могут выполнять какие-либо операции отправки или модификации в репозиторий Github— — Это потому, что это Приложение Github не было установлено репозиторием, что также является самым большим отличием от приложения OAuth.
Установка приложения GitHub
с моей платформой блогаjrainlau.github.ioНапример, если я хочу, чтобы пользователи могли комментировать проблему через API, мне нужно установить приложение Github в этот репозиторий:
Перейдите на страницу редактирования Github APP Settings/Developer settings/Github Apps/SOMEONE:BLOG, найдите Install App слева, а затем выберите свою учетную запись для установки:
Вы можете выбрать все репозитории под своей учетной записью или только определенный репозиторий для использования этого приложения. После нажатия кнопки «Авторизовать» приложение Github будет установлено. На этом этапе пользователи могут читать и записывать авторизованные хранилища через API.
На платформе блога пользователи, оставляющие комментарии через это ПРИЛОЖЕНИЕ, также будут отмечать свое появление в ПРИЛОЖЕНИИ Github: