第十节 spring could security实现OAuth2

使用spring could security实现OAuth2来控制服务中api的安全

  1. 首先创建一个安全服务spring security,用于控制身份验证和授权。
  • 增加pom依赖
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
        </dependency>
  • 在启动类上增加@EnableResourceServer表示允许该服务作为资源服务器使用 同时启用@EnableAuthorizationServer表示启用授权服务器,可参照如下配置:
//启用资源服务器
@SpringBootApplication
@RestController
@EnableResourceServer
public class SecurityApp {

    @RequestMapping("/user")
    public Principal user(Principal user) {
        return user;
    }

    public static void main(String[] args) {
        SpringApplication.run(SecurityApp.class, args);
    }
//同时配置oauth2授权服务器
    @Configuration
    @EnableAuthorizationServer
    protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {

        @Autowired
        private AuthenticationManager authenticationManager;

        @Override
        public void configure(AuthorizationServerEndpointsConfigurer endpointsConfigurer) throws Exception {
            endpointsConfigurer.authenticationManager(authenticationManager);
        }

        @Override
        public void configure(ClientDetailsServiceConfigurer clientDetailsServiceConfigurer) throws Exception {
            //作为示例使用硬编码配置
            clientDetailsServiceConfigurer.inMemory()
                    .withClient("client")
                    .secret("clientsecret")
                    .authorizedGrantTypes("authorization_code", "refresh_token", "implicit", "password", "client_credentials")
                    .scopes("apiAccess");
        }
    }
}
  • 配置文件
info:
    component:
        Security Server

server:
    port: 9001
    ssl:
        key-store: classpath:keystore.jks
        key-store-password: password
        key-password: password
# contextPath表示上下文;路径
    contextPath: /auth
# 暂时使用硬编码
security:
    user:
        password: password

logging:
    level:
        org.springframework.security: DEBUG
  1. 有了安全服务器,现在创建api server作为对外公开的api并通过安全服务器认证
  • 增加pom依赖
 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
        </dependency>
  • 将api-server作为资源服务器 添加@EnableResourceServer
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
@EnableResourceServer
@Configuration
@ComponentScan({"com.xzg.api.service", "com.xzg.common"})
public class ApiApp {

    private static final Logger LOG = LoggerFactory.getLogger(ApiApp.class);

    static {
        // for localhost testing only
        LOG.warn("Will now disable hostname check in SSL, only to be used during development");
        HttpsURLConnection.setDefaultHostnameVerifier((hostname, sslSession) -> true);
    }

    @Value("${app.rabbitmq.host:localhost}")
    String rabbitMqHost;

    @Bean
    public ConnectionFactory connectionFactory() {
        LOG.info("Create RabbitMqCF for host: {}", rabbitMqHost);
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(rabbitMqHost);
        return connectionFactory;
    }

    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        LOG.info("Register MDCHystrixConcurrencyStrategy");
        HystrixPlugins.getInstance().registerConcurrencyStrategy(new MDCHystrixConcurrencyStrategy());
        SpringApplication.run(ApiApp.class, args);
    }
}
  • 配置文件
info:
  component: API Service

spring:
    application:
        name: api-service
    aop:
        proxyTargetClass: true

server:
  port: 7771

security:
  oauth2:
    resource:
      userInfoUri: https://localhost:9001/auth/user

management:
  security:
    enabled: false
# 其他略

启动测试。。 spring boot 实现

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏耕耘实录

当SSH免密登录的私钥被移动之后... ...

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

1203
来自专栏用户画像

gitlab配置ssh key

712
来自专栏java工会

Spring Boot入门

1812
来自专栏颇忒脱的技术博客

Spring、Spring Boot和TestNG测试指南 - 使用Spring Boot Testing工具

前面一个部分讲解了如何使用Spring Testing工具来测试Spring项目,现在我们讲解如何使用Spring Boot Testing工具来测试Sprin...

1593
来自专栏Hongten

Hibernate中使用memcached

Hibernate-memcached是CacheProvider接口的memcached实现

1792
来自专栏Java帮帮-微信公众号-技术文章全总结

高级框架-SpringBoot【悟空教程】

Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品。无需开发重量级的 Enterp...

3952
来自专栏Java大联盟

SpringBoot教程(4):整合MyBatis逆向工程

3652
来自专栏about云

让你快速认识flume及安装和使用flume1.5传输数据(日志)到hadoop2.2

问题导读: 1.什么是flume? 2.如何安装flume? 3.flume的配置文件与其它软件有什么不同? 一、认识flume 1.flume是什么? ...

38213
来自专栏Ken的杂谈

Spring Cloud 入门教程8、服务网关Zuul+Hystrix:断路处理与监控

参考上一篇:https://ken.io/note/spring-cloud-zuul-quickstart 基于源码:https://github.com/k...

2.5K2
来自专栏闵开慧

hive.metastore.HiveMetaStoreClient​

14/04/07 15:33:21 INFO hive.metastore: Waiting 1 seconds before next connection ...

3378

扫码关注云+社区

领取腾讯云代金券