前面全面讲解了 spring cloud 统一安全认证 搭建,参考 spring cloud oauth2 微服务 统一认证授权 框架搭建 。也解决了解决spring cloud feign模式下 访问服务统一认证的问题,这里单独提出来一下。
使用 @FeignClient 来实现无感知url调用服务,但是服务间调用接口时,是不包含token的,所以,我们要加下面的配置类,来将token放入feign调用之前。
/**
* oauth client 配置
* @Author: houyong
* @Date: 2019/11/19
*/
@Configuration
public class OAuth2ClientConfig {
/**
* 下面bean配置 是为了解决 feign 模式下 统一验证凭证的问题,因为服务全部被保护起来了
* @return
*/
@Bean
@ConfigurationProperties(prefix = "security.oauth2.client")
public ClientCredentialsResourceDetails clientCredentialsResourceDetails() {
return new ClientCredentialsResourceDetails();
}
@Bean
public RequestInterceptor oauth2FeignRequestInterceptor(){
return new OAuth2FeignRequestInterceptor(new DefaultOAuth2ClientContext(), clientCredentialsResourceDetails());
}
@Bean
public OAuth2RestTemplate clientCredentialsRestTemplate() {
return new OAuth2RestTemplate(clientCredentialsResourceDetails());
}
}
对应application.properties 配置
#security
security.oauth2.client.access-token-uri=http://localhost:8100/oauth/token
security.oauth2.resource.user-info-uri=http://localhost:8100/user/current
security.oauth2.client.grant-type=client_credentials
security.oauth2.client.client-id=cloud_client
security.oauth2.client.client-secret=znxzEgClient888