Spring Security + OAuth2 + JWT入门到实战】19. oauth2资源服务器

匆匆过客 提交于 2020-03-17 21:04:22

某厂面试归来,发现自己落伍了!>>>

简介

为什么需要资源服务器呢?我们先来看下在没有定义资源服务器的时候,使用Token去获取资源时会发生什么。

定义一个REST接口:

   /**
     * 获取用户资料
     *
     * @param user
     * @return
     */
    @GetMapping("/user/me")
    private Object getCurrentUser(@AuthenticationPrincipal UserDetails user) {
        return user;
    }

启动项目,为了方便我们使用密码模式获取令牌,然后使用该令牌获取/user/me这个资源

Authorization值为token_type access_token,发送请求后,返回:

{
    "timestamp": "2020-03-17T12:44:21.732+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Unauthorized",
    "path": "/user/me"
}

虽然令牌是正确的,但是并无法访问/user/me,所以我们必须配置资源服务器,让客户端可以通过合法的令牌来获取资源。

资源服务器的配置也很简单,只需要在配置类上使用@EnableResourceServer注解标注即可:

创建资源服务器类

和认证服务器类同目录创建HkResourceServerConfig资源服务器类

package com.spring.security;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;

/**
 * 资源服务器
 */
@Configuration
@EnableResourceServer
public class HkResourceServerConfig {

}

重启服务,重复上面的步骤,再次访问/user/me便可以成功获取到信息:

在同时定义了认证服务器和资源服务器后,再去使用授权码模式获取令牌可能会遇到 Full authentication is required to access this resource 的问题,这时候只要确保认证服务器先于资源服务器配置即可,比如在认证服务器的配置类上使用@Order(1)标注,在资源服务器的配置类上使用@Order(2)标注。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!