OAuth App
流程
1、在 Settings -> Developer Settings -> OAuth App 下创建 OAuth App,填写回调地址,得到 Client ID 和 Client secret
参考:https://docs.github.com/cn/developers/apps/creating-an-oauth-app
2、前端引导用户 到 https://github.com/login/oauth/authorize?client_id=*** 进行登录操作
3、用户登录后,自动回跳到 http://回调地址?code=***
4、前端拿到 code 以后 提交给后端
5、后端凭 code 从 https://github.com/login/oauth/access_token 拿到 access_token
参考:https://docs.github.com/cn/developers/apps/authorizing-oauth-apps
6、后端从此就可以凭 access_token 调用 Github 的只读 API
参考:https://docs.github.com/en/rest/reference/repos
Github App
1、在 Settings -> Developer Settings -> Github App 下创建 Github App,选择API权限 和 webhook 订阅的事件
填写 “Callback URL”,勾选 “Request user authorization (OAuth) during installation”,使得用户安装时就会跳转到 “Callback URL”,同时带上 code,开发者 拿 code 取得 access_token,同 OAuth App
参考:https://docs.github.com/en/developers/apps/identifying-and-authorizing-users-for-github-apps
“User-to-server token expiration” Opt-out,使得 access_token 不会过期
填写 “Webhook URL” 用来订阅 仓库事件
2、用户安装 Github App,会被引导登录和授权,后带code跳转到 “Callback URL”
3、前端拿到 code 以后 提交给后端,后端凭 code 从 https://github.com/login/oauth/access_token 拿到 access_token
4、后端拿 access_token 从 https://api.github.com/user/installations 获取安装信息,得到 installtion_id 列表,与 acceess_token 对应保存起来
参考:https://docs.github.com/en/developers/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps
5、订阅事件发生时,Github 将事件推送到 “Webhook URL” ,后端通过installation_id找到对应的 access_token,进而 调用 Github 的 API
事件类型:header X-GitHub-Event
installation_id:payload installation.id