Spring Security实现OAuth2.0——资源服务

 我来答
世纪网络17
2022-07-19 · TA获得超过5949个赞
知道小有建树答主
回答量:2426
采纳率:100%
帮助的人:142万
展开全部

在上一篇文章中,我们已经实现了授权服务器,拿到访问token已经不是问题了。本文主要讲述如何搭建一个资源服务器,根据第三方客户端访问请求和token来实现资源的权限控制。

资源服务器的核心配置类就是需要继承 ResourceServerConfigurerAdapter ,并重写其中的资源配置方法和安全鉴权方法。

token校验有两种方式:

我们该案例中资源服务器和授权服务器是不同的机器,大多数实际业务场景中也是不同的,所以我们以 RemoteTokenServices 为例进行演示,这里放到和资源服务器配置类一块:

资源服务器也是一个独立的应用,所以也需要增加安全访问的配置,这个在先前讲Spring Security的时候已经详细介绍过了。

最后,增加我们的访问资源即可,这里就是Controller。

此时,我们就完成了资源服务器的所有内容。

我们以 客户端模式 启动上一节的授权服务器后,通过HTTP工具(我这里使用IDEA的插件RestClient)来进行如下的测试:

首先访问如下请求以获取访问token:

得到的内容如下:

此时我们先不使用资源服务器,我们使用如下的请求来模拟资源服务器的验证token,以此来判断授权服务器是否能正常工作:

得到的返回内容是:

可以看到,允许访问的资源ID是 user 、访问的资源域是 all ,拥有的权限是 user:query ,供client_id为 iSchool 的第三方应用访问,这和我们前面配置授权服务器时的内容一致,因此授权服务是正常的。

然后,我们就启动资源服务器,现在来请求资源服务器的资源,并带上我们从授权服务器那里得到的token:

得到的返回结果为:

但是,如果我们访问另外一个接口:

得到的结果就是:

很明显,当资源服务请求授权服务的时候,授权服务告诉资源服务,当前这个访问token只有 user:query 权限,所以需要其它权限才能访问的资源就被禁止。

如果我们的资源服务器域名称不是 all ,而是改成了 user ,那么访问资源就会报错如下信息:

在实际的使用场景中,一个访问token并不仅仅限制只能访问拥有权限范围内的接口,还会限制只能访问某个客户的信息,因此我们还需要在授权中增加用户的身份信息。待研究。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式