前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第十三节 资源服务和认证服务通信,校验token

第十三节 资源服务和认证服务通信,校验token

作者头像
用户1418372
发布2018-10-11 11:05:48
2K0
发布2018-10-11 11:05:48
举报
文章被收录于专栏:清晨我上码清晨我上码

由于本项目资源服务和认证服务不在同一服务上,这里token‘认证使用远程认证服务器认证

修改资源服务器的配置,主要在配置类继承资源配置ResourceServerConfigurerAdapter的configure方法

1) 设置RestTemplate,默认RestTemplate有些格式无法解析,配置相关解析器

代码语言:javascript
复制
@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) 设置token解析器,因为认证服务使用的为默认解析器,这里保持一致

代码语言:javascript
复制
 @Bean
        public AccessTokenConverter accessTokenConverter() {
        return new DefaultAccessTokenConverter();
    }
  1. 设置远程远程调用服务,以及配置
代码语言:javascript
复制
@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");
//这里硬编码客户端信息,服务端硬编码保存在内存里,生产上请修改
        remoteTokenServices.setClientId("client");
        remoteTokenServices.setClientSecret("password");
      remoteTokenServices.setRestTemplate(restTemplate());
        remoteTokenServices.setAccessTokenConverter(accessTokenConverter());
        return remoteTokenServices;
    }

认证服务的修改 1) 为了是校验请求通过,认证服务,修改配置public class OAuth2Config extends AuthorizationServerConfigurerAdapter 增加.checkTokenAccess("permitAll()")

代码语言:javascript
复制
 @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security
                // 开启/oauth/token_key验证端口无权限访问
                .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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.09.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 由于本项目资源服务和认证服务不在同一服务上,这里token‘认证使用远程认证服务器认证
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档