知识卡片
作用域是应用的角色,角色是用户的作用域
内容
OAuth2 的作用域(scope)和角色(role)经常被搞混,但它们限制的对象完全不同:作用域限制的是”这个应用被允许访问用户的哪部分数据”,可以类比成应用维度的角色——用第三方账号登录时弹出的”该应用想访问你的邮箱、你的好友列表”这类授权确认弹窗,问的就是作用域该不该被授予;角色限制的是”这个用户在系统里能做什么”,是用户维度的权限。二者又能组合起来用:给边缘服务申请一个自定义的 roles 作用域,身份提供者据此才愿意把用户的角色列表塞进令牌的声明里返回,边缘服务和下游服务再基于这份角色声明做真正面向用户的权限判断。发散:这条区分解释了为什么访问令牌里经常同时出现 scope 和 roles 两种声明却服务于不同目的——一个回答”这个客户端凭什么能看到这些数据”,一个回答”这个数据的主人本身有没有权限做这件事”,两层校验缺一个都不完整。
参考来源
《Cloud Native Spring in Action》第12章《Security: Authorization and auditing》