Google OAuth如何实现仅撤销指定scope而非全部授权的能力
Google OAuth 单Scope权限撤销(减量授权)实现方案
- 先排查你当前误撤销全量权限的原因:绝大多数情况是直接调用了Google的全量撤销接口
https://oauth2.googleapis.com/revoke?token={access_token/refresh_token},这个接口的作用就是直接撤销用户授予你应用的所有权限,只要调用就会清掉所有授权范围,自然没办法单独移除指定Scope。 - Google OAuth本身没有直接删除单个授权Scope的接口,减量授权的标准实现逻辑是重新走授权流程覆盖原有授权范围:
- 先在你自己的服务端维护每个用户当前已授权的Scope列表,不要仅存储Access Token/Refresh Token
- 用户发起部分权限撤销请求时,先从本地存储的Scope列表中删除用户要移除的目标Scope,仅保留需要保留的Scope项
- 用剩下的Scope构造新的OAuth授权链接,必须在链接中添加参数
include_granted_scopes=false(这个参数默认值为true,会自动带上用户之前已经授权过的所有Scope,设为false才会强制覆盖旧的授权范围) - 用户完成新的授权后,原有未出现在本次请求中的Scope就会自动失效,实现单独移除指定权限的效果
- 如果用户需要撤销全部授权,再使用原来的全量撤销接口即可。
注:如果用户在授权弹窗中取消了新的授权请求,原有授权范围不会发生变更,不会影响现有功能的正常使用。
内容的提问来源于stack exchange,提问作者ScriptKiddieOnAComputer
相关产品推荐
相关产品推荐

