如何在GitHub应用获批准后识别原请求用户?
解决GitHub应用审批后关联原请求用户的方案
以下是几个可行的实现思路:
1. 利用OAuth授权的state参数传递用户标识
- 发起GitHub应用安装请求时,在授权URL的
state参数中加入加密后的Web应用用户唯一ID(比如用户UUID,避免明文泄露)。GitHub会在所有回调请求中原样返回这个state值。 - 当收到
/callback?setup_action=request时,提取state解密得到用户ID,同时记录GitHub返回的installation_request_id,将两者关联存储(比如存入数据库)。 - 管理员审批完成后,GitHub会触发带有
installation_id和原state的回调请求,或者通过Webhook推送安装完成事件。此时通过state找到原用户,完成installation_id与用户账号的绑定。
2. 监听GitHub Webhook事件关联用户
- 为你的GitHub App配置
installation_request和installation两类Webhook事件:- 用户发起安装请求时,GitHub会发送
installation_request事件,其中包含sender字段(发起请求的GitHub用户信息)和installation_request_id。 - 管理员批准后,会触发
installation事件,事件数据里包含installation_id和对应的installation_request_id。
- 用户发起安装请求时,GitHub会发送
- 收到
installation_request事件时,将sender.id(GitHub用户ID)与installation_request_id绑定,同时关联到Web应用中已存在的用户账号(前提是用户已完成过基础OAuth授权,Web应用存储了GitHub用户ID与自身用户的映射关系)。 - 收到
installation事件时,通过installation_request_id找到对应的原用户,完成installation_id的关联绑定。
3. 预关联用户的GitHub身份
- 在用户发起应用安装流程前,先引导用户完成GitHub OAuth授权,获取用户的GitHub身份信息(如用户ID),并将其与Web应用的用户账号绑定存储。
- 当收到
setup_action=request的回调时,记录installation_request_id并关联到该用户的GitHub ID。 - 审批完成后,通过Webhook的
installation事件中的installation_request_id,找到对应的GitHub用户ID,进而关联到Web应用的用户账号。
内容的提问来源于stack exchange,提问作者Ankit
相关产品推荐
相关产品推荐

