如何在访问之间持久保留 GitHub OAuth 范围?
How do I retain GitHub OAuth scopes persistently between visits?
我在 GitHub 上有一个开发者应用程序。当新用户登录我的站点时,我请求 'admin:repo_hook' 范围。他们面对 GitHub 授权屏幕,他们点击 'Accept',然后他们被引导回我的网站,他们现在已经登录了。
用户 ID 以及用户授予的任何范围的详细信息都存储在我的数据库中。
当他们开始使用我的网站时,我会在必要时要求额外的范围,例如'repo_deployment'。为了防止已经授予的权限被撤销,我传递了所有当前范围(从数据库中提取)以及新范围请求,即 'scope=repo_deployment,admin:repo_hook'。用户再次面对 GitHub 授权屏幕,他们授予 repo 部署权限,然后他们被定向回我的站点。
我的问题发生在用户退出我的站点,然后尝试重新登录时。登录时,我不知道这是新用户还是现有用户。
如果我只将 'admin:repo_hook' 作为所需范围传递,那么 GitHub 认为我现在想 撤销 'repo_deployment' 范围。但是我无法查询数据库以查看已经授予了哪些范围,因为如果不使用 OAuth,我不知道用户的 ID。
我很乐意使用 OAuth,因为我不能传递任何范围,这意味着 GitHub 不会为我的应用程序的现有用户请求或撤销任何范围,这很好。但是 new 用户会看到授权屏幕请求 'public information' 范围 - 并且,在确定用户是没有授予范围的新用户后,我必须发送他们进入 second 授权屏幕,要求 'admin:repo_hook' 范围!
是否有持久的范围跟踪解决方案,让我可以向新用户询问特定范围,同时保留现有用户的范围,同时不向用户显示不必要的授权屏幕?
我认为这是不可能的(说了几个小时的个人实验)。
很高兴有人提供答案,但现在我已经妥协,只需要多个范围界定请求。
我在 GitHub 上有一个开发者应用程序。当新用户登录我的站点时,我请求 'admin:repo_hook' 范围。他们面对 GitHub 授权屏幕,他们点击 'Accept',然后他们被引导回我的网站,他们现在已经登录了。
用户 ID 以及用户授予的任何范围的详细信息都存储在我的数据库中。
当他们开始使用我的网站时,我会在必要时要求额外的范围,例如'repo_deployment'。为了防止已经授予的权限被撤销,我传递了所有当前范围(从数据库中提取)以及新范围请求,即 'scope=repo_deployment,admin:repo_hook'。用户再次面对 GitHub 授权屏幕,他们授予 repo 部署权限,然后他们被定向回我的站点。
我的问题发生在用户退出我的站点,然后尝试重新登录时。登录时,我不知道这是新用户还是现有用户。
如果我只将 'admin:repo_hook' 作为所需范围传递,那么 GitHub 认为我现在想 撤销 'repo_deployment' 范围。但是我无法查询数据库以查看已经授予了哪些范围,因为如果不使用 OAuth,我不知道用户的 ID。
我很乐意使用 OAuth,因为我不能传递任何范围,这意味着 GitHub 不会为我的应用程序的现有用户请求或撤销任何范围,这很好。但是 new 用户会看到授权屏幕请求 'public information' 范围 - 并且,在确定用户是没有授予范围的新用户后,我必须发送他们进入 second 授权屏幕,要求 'admin:repo_hook' 范围!
是否有持久的范围跟踪解决方案,让我可以向新用户询问特定范围,同时保留现有用户的范围,同时不向用户显示不必要的授权屏幕?
我认为这是不可能的(说了几个小时的个人实验)。
很高兴有人提供答案,但现在我已经妥协,只需要多个范围界定请求。