OAuth2.0中的scope和RBAC中的role有什么关系

ab111c3c8c015a50b582a87839911939.gif

使用了OAuth2.0授权协议之后我们在API的访问控制时又多了一个scope的概念。它和角色访问控制的作用类似,有点让人有点模糊不清。今天我们来理清楚这两个概念。

scope

scopeOAuth 2.0 中的一种机制,用于限制客户端应用程序对用户帐户的访问。客户端应用程序可以请求一个或多个scope, 资源拥有者(终端用户)可以对客户端应用程序请求的scope进行拒绝、部分接受,通常是全部接受。客户端获得的访问令牌access_token将包含用户最终指示的scope。该access_token将只能访问其包含的scope限定的的资源。

httpSecurity.mvcMatcher("/message/**")
                .authorizeRequests(requests ->
                        requests.mvcMatchers(HttpMethod.GET,"/message/read")
                                .access("hasAuthority('SCOPE_openid')"))

简而言之,scope是用来定义客户端访问资源的范围的。

role

role是RBAC权限控制的重要概念之一。一方面它限制了资源的访问,资源该由那些角色访问;另一方面它确定了用户在应用程序中承担何种角色。它让资源和用户之间不再耦合,简化了权限的管理。role是从用户角度来进行访问控制的一种方式。

httpSecurity.mvcMatcher("/message/**")
                .authorizeRequests(requests ->
                        requests.mvcMatchers(HttpMethod.GET,"/message/read")
                                .access("hasAuthority('ROLE_USER')"))

两者的关系

从逻辑上讲,用户只是将自身有权限访问的API授权给了某个客户端应用。

httpSecurity.mvcMatcher("/message/**")
                .authorizeRequests(requests ->
                        requests.mvcMatchers(HttpMethod.GET,"/message/read")
                                .access("hasAnyAuthority('SCOPE_openid','ROLE_USER')"))

其实我们记住这一条就可以了:scope基于客户端应用,role基于用户,它们的作用都是访问控制被授权给第三方访问的API一定可以被该用户访问;能被该用户访问的API则不一定可以被授权给第三方访问。

Spring OAuth2 授权服务器配置详解

2021-11-15

ce497d7d5d65a1de6bfe108bea3df10c.png

授权服务器框架Spring Authorization Server的过滤器链

2021-11-11

3b865379ec2f2e84c1b6e3f0a0ac51e0.png

Spring新的授权服务器Spring Authorization Server入门

2021-11-09

73922ca00a1a0f060b5c47ac40e6359d.png

ca5c07dc5d1e4ac5d261465c76a4cec7.gif

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小胖哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值