当前位置:   article > 正文

Spring Cloud 系列文章之八:Spring Cloud Security 在微服务架构中的应用_springcloud中 还需要使用spring secutiry了吗

springcloud中 还需要使用spring secutiry了吗

Spring Cloud 系列文章之八:Spring Cloud Security 在微服务架构中的应用

引言

在微服务架构中,安全性是一个至关重要的问题。Spring Cloud Security 提供了一整套安全解决方案,帮助开发者保护微服务系统的安全,包括身份验证、授权、OAuth2等功能。本篇文章将详细介绍 Spring Cloud Security 的基本概念及其在实际项目中的应用。

什么是 Spring Cloud Security?

Spring Cloud Security 是 Spring Security 的扩展,专注于为微服务架构提供安全解决方案。它集成了 OAuth2 和 JWT 等标准,为微服务提供安全保护,支持服务间的安全通信和单点登录(SSO)。

搭建 OAuth2 授权服务器
  1. 创建 Spring Boot 项目

首先,创建一个新的 Spring Boot 项目,并添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-oauth2</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.h2</groupId>
        <artifactId>h2</artifactId>
    </dependency>
</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  1. 配置授权服务器

application.yml 文件中配置 OAuth2 授权服务器:

server:
  port: 8081

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password: password
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

security:
  oauth2:
    client:
      client-id: my-client-id
      client-secret: my-client-secret
      grant-type: authorization_code
      scopes: read,write
    resource:
      id: my-resource-id
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  1. 创建授权服务器配置类

创建一个配置类,配置授权服务器:

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
                .withClient("my-client-id")
                .secret("{noop}my-client-secret")
                .authorizedGrantTypes("authorization_code", "refresh_token", "password")
                .scopes("read", "write")
                .redirectUris("http://localhost:8082/login");
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints.authenticationManager(authenticationManager);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  1. 配置安全

创建一个配置类,配置 Web 安全:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("user")
                .password("{noop}password")
                .roles("USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().authenticated()
                .and()
            .formLogin().permitAll();
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
搭建资源服务器
  1. 创建 Spring Boot 项目

创建一个新的 Spring Boot 项目,并添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-oauth2</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  1. 配置资源服务器

application.yml 文件中配置资源服务器:

server:
  port: 8082

security:
  oauth2:
    resource:
      user-info-uri: http://localhost:8081/user
      token-info-uri: http://localhost:8081/oauth/check_token
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 创建资源服务器配置类

创建一个配置类,配置资源服务器:

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public").permitAll()
                .anyRequest().authenticated();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  1. 创建受保护的资源

创建一个 REST 控制器,定义受保护的资源:

@RestController
public class ResourceController {

    @GetMapping("/public")
    public String publicResource() {
        return "Public Resource";
    }

    @GetMapping("/protected")
    public String protectedResource() {
        return "Protected Resource";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
测试 OAuth2 认证与授权
  1. 获取授权码

在浏览器中访问以下 URL,进行 OAuth2 授权:

http://localhost:8081/oauth/authorize?response_type=code&client_id=my-client-id&redirect_uri=http://localhost:8082/login&scope=read
  • 1
  1. 获取访问令牌

通过授权码获取访问令牌:

curl -X POST \
  http://localhost:8081/oauth/token \
  -u my-client-id:my-client-secret \
  -d grant_type=authorization_code \
  -d code=YOUR_AUTH_CODE \
  -d redirect_uri=http://localhost:8082/login
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 访问受保护的资源

使用访问令牌访问受保护的资源:

curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" http://localhost:8082/protected
  • 1
小结

通过本文的介绍,您已经了解了如何使用 Spring Cloud Security 实现 OAuth2 认证与授权。Spring Cloud Security 提供了一整套安全解决方案,能够有效保护微服务系统的安全。在下一篇文章中,我们将探讨 Spring Cloud Stream 的使用及其在微服务中的应用,敬请期待。


如果您觉得这篇文章有用,请点赞、分享并关注我的博客,以便获取更多关于 Spring Cloud 的最新资讯。您的支持是我不断创作的动力!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号