第十三節(jié) 資源服務(wù)和認證服務(wù)通信,校驗token

由于本項目資源服務(wù)和認證服務(wù)不在同一服務(wù)上,這里token‘認證使用遠程認證服務(wù)器認證

修改資源服務(wù)器的配置,主要在配置類繼承資源配置ResourceServerConfigurerAdapter的configure方法

1) 設(shè)置RestTemplate,默認RestTemplate有些格式無法解析,配置相關(guān)解析器

@LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        //httpRequestFactory()
        RestTemplate restTemplate = new RestTemplate();
        List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                MappingJackson2HttpMessageConverter jsonConverter = (MappingJackson2HttpMessageConverter) converter;
                jsonConverter.setObjectMapper(new ObjectMapper());
                jsonConverter.setSupportedMediaTypes(ImmutableList.of(new MediaType("application", "json", MappingJackson2HttpMessageConverter.DEFAULT_CHARSET), new MediaType("text", "javascript", MappingJackson2HttpMessageConverter.DEFAULT_CHARSET)));
            }
        }
        return restTemplate;
    }

2) 設(shè)置token解析器,因為認證服務(wù)使用的為默認解析器,這里保持一致

 @Bean
        public AccessTokenConverter accessTokenConverter() {
        return new DefaultAccessTokenConverter();
    }
  1. 設(shè)置遠程遠程調(diào)用服務(wù),以及配置
@Override
    public void configure(ResourceServerSecurityConfigurer resources) {
        resources.tokenServices(tokenServices());//.resourceId(SPARKLR_RESOURCE_ID);
    }
  @Bean
  public ResourceServerTokenServices tokenServices() {
        RemoteTokenServices remoteTokenServices = new RemoteTokenServices();
        remoteTokenServices.setCheckTokenEndpointUrl("https://security-service/oauth/check_token");
//這里硬編碼客戶端信息,服務(wù)端硬編碼保存在內(nèi)存里,生產(chǎn)上請修改
        remoteTokenServices.setClientId("client");
        remoteTokenServices.setClientSecret("password");
      remoteTokenServices.setRestTemplate(restTemplate());
        remoteTokenServices.setAccessTokenConverter(accessTokenConverter());
        return remoteTokenServices;
    }

認證服務(wù)的修改
1) 為了是校驗請求通過,認證服務(wù),修改配置public class OAuth2Config extends AuthorizationServerConfigurerAdapter
增加.checkTokenAccess("permitAll()")

 @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security
                // 開啟/oauth/token_key驗證端口無權(quán)限訪問
                .tokenKeyAccess("permitAll()")
                .checkTokenAccess("permitAll()")
                .passwordEncoder(new BCryptPasswordEncoder())
//        請求/oauth/token的,如果配置支持allowFormAuthenticationForClients的,且url中有client_id和client_secret的會走ClientCredentialsTokenEndpointFilter
                .allowFormAuthenticationForClients();
    }

測試如下

  1. 正確攜帶token訪問api-server的接口
圖片.png
  1. 不使用token、或者錯誤token使用,返回401或者token異常500


    圖片.png

微服務(wù)項目源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容