A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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();  
   } }



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马