基于Spring Cloud 几行配置完成单点登录开发-阿里云开发者社区

开发者社区> 冷冷zz> 正文

基于Spring Cloud 几行配置完成单点登录开发

简介:
+关注继续查看

image

单点登录概念

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。登录逻辑如上图

基于Spring 全家桶的实现

技术选型:

Spring Boot

Spring Cloud 

Spring Security oAuth2

客户端:

maven依赖

<dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-security</artifactId>

</dependency>

<dependency>

    <groupId>org.springframework.security.oauth</groupId>

    <artifactId>spring-security-oauth2</artifactId>

</dependency>

<dependency>

    <groupId>org.springframework.security</groupId>

    <artifactId>spring-security-jwt</artifactId>

</dependency>

EnableOAuth2Sso 注解

入口类配置@@EnableOAuth2Sso

@SpringBootApplication

public class PigSsoClientDemoApplication {



    public static void main(String[] args) {

        SpringApplication.run(PigSsoClientDemoApplication.class, args);

    }



}

配置文件

security:

  oauth2:

    client:

      client-id: pig

      client-secret: pig

      user-authorization-uri: http://localhost:3000/oauth/authorize

      access-token-uri: http://localhost:3000/oauth/token

      scope: serve

    resource:

      jwt:

        key-uri: http://localhost:3000/oauth/token\_key

  sessions: neve

SSO认证服务器

认证服务器配置

@Configuration

@Order(Integer.MIN\_VALUE)

@EnableAuthorizationServe

public class PigAuthorizationConfig extends AuthorizationServerConfigurerAdapter {



    @Override

    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {

        clients.inMemory()

                .withClient(authServerConfig.getClientId())

                .secret(authServerConfig.getClientSecret())

                .authorizedGrantTypes(SecurityConstants.REFRESH\_TOKEN, SecurityConstants.PASSWORD,SecurityConstants.AUTHORIZATION\_CODE)

                .scopes(authServerConfig.getScope());

    }



    @Override

    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {

        endpoints

                .tokenStore(new RedisTokenStore(redisConnectionFactory))

                .accessTokenConverter(jwtAccessTokenConverter())

                .authenticationManager(authenticationManager)

                .exceptionTranslator(pigWebResponseExceptionTranslator)

                .reuseRefreshTokens(false)

                .userDetailsService(userDetailsService);

    }



    @Override

    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {

        security

                .allowFormAuthenticationForClients()

                .tokenKeyAccess("isAuthenticated()")

                .checkTokenAccess("permitAll()");

    }



    @Bean

    public PasswordEncoder passwordEncoder() {

        return new BCryptPasswordEncoder();

    }



    @Bean

    public JwtAccessTokenConverter jwtAccessTokenConverter() {

        JwtAccessTokenConverter jwtAccessTokenConverter = new JwtAccessTokenConverter();

        jwtAccessTokenConverter.setSigningKey(CommonConstant.SIGN\_KEY);

        return jwtAccessTokenConverter;

    }



}

配置完成体验

  1. 访问SSO客户端的 index.html
  2. 重定向到SSO服务端的 Basic 认证
  3. 输入账号密码又重定向到原请求的 客户端index资源

总结

  • 客户端访问服务端 403问题? 用户需要拥有ROLE_USER的权限,具体的可以通过日志可以查看到报错。
  • Possible CSRF detected - state parameter was present but no state could be found 目前是通过设置session: never或者 cotext-path解决
  • 源码请参考 https://gitee.com/log4j/ 基于Spring Cloud、Spring Security Oauth2.0开发企业级认证与授权,提供常见服务监控、链路追踪、日志分析、缓存管理、任务调度等实现

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
第一个 Java 程序|学习笔记
快速学习 第一个 Java 程序
6 0
方法的定义与使用(方法递归调用)|学习笔记
快速学习 方法的定义与使用(方法递归调用)
10 0
方法的定义与使用(方法重载)|学习笔记
快速学习 方法的定义与使用(方法重载)
6 0
程序逻辑控制(循环控制)|学习笔记
快速学习 程序逻辑控制(循环控制)
7 0
10S
冬季实战营第一期:从零到一上手玩转云服务器的学习报告
训练营日期:2022年1月17日 - 2022年1月23日,通过前五日从零学习云服务器,还能领取限量版盲盒等奖品
6 0
程序逻辑控制(循环结构)|学习笔记
快速学习 程序逻辑控制(循环结构)
9 0
解决Java- 错误: 找不到或无法加载主类 HelloWorld.java
针对初学者使用javac,java等命令编译class文件时出现的经典问题,提供解决思路和方法。
12 0
冬季实战营第一期:从零到一上手玩转云服务器学习报告
1月17-21日,我参加冬季实战营第一期:从零到一上手玩转云服务器学习,从创建一台ECS实例开始,学习了ECS云服务器新手上路、搭建LAMP环境(Linux、Apache、MySQL和PHP)、通过ECS服务器部署MySQL数据库等,掌握了ECS实例、部署应用等知识。
10 0
ECS服务器部署MySQL数据库学习笔记
通过冬季实战营第一期学习在ECS服务器部署MySQL数据库。
7 0
“冬季实战营第一期”之从零到一上手玩转云服务器——学习报告
动手实战、专家带练。由浅及深,逐渐提升动手实操能力。
19 0
+关注
冷冷zz
联系我: pig4cloud.com 欢迎署名转载此账号文章
52
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载