黑马程序员技术交流社区

标题: 【郑州校区】Java的新项目学成在线笔记-day16(六) [打印本页]

作者: 谷粒姐姐    时间: 2019-6-19 10:07
标题: 【郑州校区】Java的新项目学成在线笔记-day16(六)
3.3.4 资源服务授权 3.3.4.1 资源服务授权流程
资源服务拥有要访问的受保护资源,客户端携带令牌访问资源服务,如果令牌合法则可成功访问资源服务中的资 源,如下图:

上图的业务流程如下:

1、客户端请求认证服务申请令牌 2、认证服务生成令牌
认证服务采用非对称加密算法,使用私钥生成令牌。
3、客户端携带令牌访问资源服务
客户端在Http header 中添加: Authorization:Bearer 令牌。 4、资源服务请求认证服务校验令牌的有效性
资源服务接收到令牌,使用公钥校验令牌的合法性。
5、令牌有效,资源服务向客户端响应资源信息   3.3.4.2 资源服务授权配置

基本上所有微服务都是资源服务,这里我们在课程管理服务上配置授权控制,当配置了授权控制后如要访问课程信 息则必须提供令牌。
1、配置公钥
认证服务生成令牌采用非对称加密算法,认证服务采用私钥加密生成令牌,对外向资源服务提供公钥,资源服务使 用公钥 来校验令牌的合法性。 将公钥拷贝到 publickey.txt文件中,将此文件拷贝到资源服务工程的classpath下


2、添加依赖

[AppleScript] 纯文本查看 复制代码
<dependency> <groupId>org.springframework.cloud</groupId>     
<artifactId>spring‐cloud‐starter‐oauth2</artifactId>  
   </dependency>

4、在config包下创建ResourceServerConfig类:

[AppleScript] 纯文本查看 复制代码
@Configuration @EnableResourceServer @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)//激活方法上的 PreAuthorize注解 public class ResourceServerConfig extends ResourceServerConfigurerAdapter {   
    //公钥     private static final String PUBLIC_KEY = "publickey.txt";
    //定义JwtTokenStore,使用jwt令牌     
@Bean   
  public TokenStore tokenStore(JwtAccessTokenConverter jwtAccessTokenConverter) {   
    return new JwtTokenStore(jwtAccessTokenConverter);   
  }      
//定义JJwtAccessTokenConverter,使用jwt令牌  
   @Bean  
   public JwtAccessTokenConverter jwtAccessTokenConverter() {   
      JwtAccessTokenConverter converter = new JwtAccessTokenConverter();      
   converter.setVerifierKey(getPubKey());   
     return converter;   
  }   
  /**  
    * 获取非对称加密公钥 Key   
  * @return 公钥 Key  
    */   
private String getPubKey() {   
     Resource resource = new ClassPathResource(PUBLIC_KEY);      
   try {      
       InputStreamReader inputStreamReader = new  InputStreamReader(resource.getInputStream());             BufferedReader br = new BufferedReader(inputStreamReader);      
      return br.lines().collect(Collectors.joining("\n"));   
      } catch (IOException ioe) {      
      return null;     
    }
    }     
//Http安全配置,对每个到达系统的http请求链接进行校验   
  @Override  
   public void configure(HttpSecurity http) throws Exception {         
        //所有请求必须认证通过         
       http.authorizeRequests().anyRequest().authenticated();  
   } }








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2