当前位置: 首页 > wzjs >正文

摄影网站开发背景重庆做网站建设团队

摄影网站开发背景,重庆做网站建设团队,品牌设计logo图片,丝绸之路网站建设单点登录(Single Sign-On, SSO)是一种身份验证机制,允许用户使用一组凭证(如用户名和密码)登录多个相关但独立的系统。 一、单点登录的核心原理 SSO的核心原理使集中认证、分散授权,主要流程如下: 1.用户访问应用A 2.应用A检查本地会话&a…

单点登录(Single Sign-On, SSO)是一种身份验证机制,允许用户使用一组凭证(如用户名和密码)登录多个相关但独立的系统。

一、单点登录的核心原理

SSO的核心原理使集中认证、分散授权,主要流程如下:

1.用户访问应用A

2.应用A检查本地会话,发现未登录

3.重定向到SSO认证中心

4.用户在认证中心登录

5.认证中心创建全局会话,并颁发令牌

6.用户携带令牌返回应用A

7.应用A向认证中心验证令牌

8.认证中心返回用户信息,应用A创建本地会话

9.用户访问应用B时重复2-8流程(但无需重复登录)

二、Spring Boot实现SSO的三种主流方案

方案1:基于OAuth2的实现(推荐)
1.添加依赖
<!-- Spring Security OAuth2 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
2.认证中心配置
@Configuration
@EnableAuthorizationServer
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {@Overridepublic void configure(ClientDetailsServiceConfigurer clients) throws Exception {clients.inMemory().withClient("client1").secret(passwordEncoder().encode("secret1")).authorizedGrantTypes("authorization_code", "refresh_token").scopes("read", "write").redirectUris("http://localhost:8081/login/oauth2/code/client1").autoApprove(true);}@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}
3.资源服务配置
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {@Overridepublic void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/api/**").authenticated().anyRequest().permitAll();}
}
4.客户端应用配置
# application.yml
spring:security:oauth2:client:registration:sso:client-id: client1client-secret: secret1authorization-grant-type: authorization_coderedirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"scope: read,writeprovider:sso:issuer-uri: http://localhost:8080
方案2:基于JWT实现
1.添加依赖
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version>
</dependency>
2.JWT工具类
public class JwtTokenUtil {private static final String SECRET = "your-secret-key";private static final long EXPIRATION = 86400000; // 24小时public static String generateToken(UserDetails userDetails) {return Jwts.builder().setSubject(userDetails.getUsername()).setIssuedAt(new Date()).setExpiration(new Date(System.currentTimeMillis() + EXPIRATION)).signWith(SignatureAlgorithm.HS512, SECRET).compact();}public static String getUsernameFromToken(String token) {return Jwts.parser().setSigningKey(SECRET).parseClaimsJws(token).getBody().getSubject();}
}
3.认证过滤器
public class JwtAuthenticationFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {String token = resolveToken(request);if (token != null && validateToken(token)) {String username = JwtTokenUtil.getUsernameFromToken(token);UserDetails userDetails = userDetailsService.loadUserByUsername(username);UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));SecurityContextHolder.getContext().setAuthentication(authentication);}chain.doFilter(request, response);}private String resolveToken(HttpServletRequest request) {String bearerToken = request.getHeader("Authorization");if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {return bearerToken.substring(7);}return null;}
}
方案3:基于CAS实现
1.添加CAS客户端依赖
<dependency><groupId>org.jasig.cas.client</groupId><artifactId>cas-client-support-springboot</artifactId><version>3.6.4</version>
</dependency>

2.CAS配置

@Configuration
public class CasConfig {@Value("${cas.server.url}")private String casServerUrl;@Value("${cas.service.url}")private String serviceUrl;@Beanpublic FilterRegistrationBean<AuthenticationFilter> casAuthenticationFilter() {FilterRegistrationBean<AuthenticationFilter> registration = new FilterRegistrationBean<>();registration.setFilter(new AuthenticationFilter());registration.addInitParameter("casServerLoginUrl", casServerUrl + "/login");registration.addInitParameter("serverName", serviceUrl);registration.addUrlPatterns("/*");return registration;}@Beanpublic ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> casSingleSignOutListener() {return new ServletListenerRegistrationBean<>(new SingleSignOutHttpSessionListener());}
}

三、SSO实现的关键技术点

1.会话管理
  • 分布式会话:使用Redis存储会话信息

    @Bean
    public RedisIndexedSessionRepository sessionRepository(RedisOperations<String, Object> redisOperations) {return new RedisIndexedSessionRepository(redisOperations);
    }
    
  • Session共享配置

    spring:session:store-type: redisredis:flush-mode: on_savenamespace: spring:session
    
2.跨域问题解决
@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "PUT", "DELETE").allowedHeaders("*").allowCredentials(true).maxAge(3600);}
}
3.安全配置
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable().authorizeRequests().antMatchers("/login", "/oauth/**").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").and().logout().logoutUrl("/logout").logoutSuccessUrl("/").invalidateHttpSession(true).deleteCookies("JSESSIONID");}
}

四、SSO实现的最佳实践

1.安全性考虑:
  • 使用HTTPS加密所有通信
  • 实现令牌的短期有效性(设置合理的过期时间)
  • 防范CSRF攻击
2.性能优化:
  • 使用缓存减少令牌验证的数据库查询
  • 实现令牌的自动续期机制
3.用户体验:
  • 实现无缝跳转,避免多次重定向
  • 提供清晰的登录状态提示
4.监控与日志
  • 记录所有认证事件
  • 实现异常登录的告警机制

五、三种SSO方案对比

方案优点缺点适用场景
OAuth2标准协议,安全性高,扩展性强实现复杂度较高企业级应用,多平台集成
JWT无状态,性能好,适合分布式系统令牌无法主动失效微服务架构,前后端分离
CAS专为SSO设计,功能完善需要额外部署CAS服务器传统企业应用,教育系统

六、常见问题解决方案

1.令牌失效问题
  • 实现令牌刷新机制
  • 使用Redis黑名单管理已注销令牌
2.跨域会话问题
  • 设置正确的Cookie域和路径

    @Bean
    public CookieSerializer cookieSerializer() {DefaultCookieSerializer serializer = new DefaultCookieSerializer();serializer.setCookieName("JSESSIONID");serializer.setCookiePath("/");serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");return serializer;
    }
    
3.多因素认证集成
@Override
protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/login").permitAll().antMatchers("/mfa-verify").hasRole("PRE_AUTH").anyRequest().fullyAuthenticated().and().formLogin().loginPage("/login").successHandler((request, response, authentication) -> {if (needsMfa(authentication)) {response.sendRedirect("/mfa-verify");} else {response.sendRedirect("/home");}});
}

文章转载自:

http://D0zwfqz4.rhjsx.cn
http://NExHvbMj.rhjsx.cn
http://H2ySYntX.rhjsx.cn
http://2nSbjjmm.rhjsx.cn
http://bLJ2lJuj.rhjsx.cn
http://e0P6Pkui.rhjsx.cn
http://tTbac6tt.rhjsx.cn
http://SLsnbYa1.rhjsx.cn
http://hm6I1hBh.rhjsx.cn
http://CSzwxPdV.rhjsx.cn
http://IRla9Bev.rhjsx.cn
http://FTWMvyAR.rhjsx.cn
http://RwXM9FUB.rhjsx.cn
http://NKwA7CfU.rhjsx.cn
http://5unihKzA.rhjsx.cn
http://jRDWWOyO.rhjsx.cn
http://0mr94caC.rhjsx.cn
http://vqyeJ0nr.rhjsx.cn
http://Ev0jpjqH.rhjsx.cn
http://3C3GIvb9.rhjsx.cn
http://j9i47jNM.rhjsx.cn
http://0ylNQF3T.rhjsx.cn
http://N1BNnofT.rhjsx.cn
http://fTpWTk3d.rhjsx.cn
http://vt68BQHL.rhjsx.cn
http://ppKMfilm.rhjsx.cn
http://9QqXWM3O.rhjsx.cn
http://CibTXeUM.rhjsx.cn
http://7Hktvypd.rhjsx.cn
http://DcVg6B3f.rhjsx.cn
http://www.dtcms.com/wzjs/715781.html

相关文章:

  • django 做网站四川省送变电建设有限责任公司网站
  • 如何做网站结构及栏目策划江西住房和城乡建设网站
  • 做电影网站多少钱设计网站客户体验
  • js素材网站wordpress 竞价页
  • 网络公司网站asp做网站英文编辑有前途吗
  • 餐饮网站建设思路建设一个网站的目标与期望
  • 建设网站要什么手续腾讯 wordpress
  • 做网站定制开发的公司企业培训的目的和意义
  • wordpress网站变灰用手机搭建自己的网站
  • 盐步网站制作注册安全工程师继续教育网
  • 网站电子地图怎么做e想时代官方网站
  • 网站怎么做移动适配东莞建设网东莞市住房和城乡
  • 教育机构网站建设方案网站流量是什么
  • 做招标网站 如何wordpress更改注册
  • 网络公司要求做网站工商网监网络营销方式举个例子
  • 花都网站建设信科网络个人网站seo入门
  • 丰台网站建设多少钱图片网站怎样选择虚拟主机
  • 免费logo生成器官网厦门最好的seo公司
  • 北京住房和建设部网站哪个网站有做彩平的材质贴图
  • 做三方网站多少钱wordpress 调用略缩图
  • 中国设计师个人网站wordpress 菜单小工具
  • HTML5移动端手机网站开发多少钱英语怎么说
  • 制作网站软件免费搭设企业网站教程
  • 水果网站怎么做的html5 网站 代码
  • 怎么设计一个自己的网站seo收费低
  • 做针织衫的网站沈阳工伤保险做实网站
  • 淮南市城乡建设档案馆网站seo顾问服务 乐云践新专家
  • 肥东网站建设转运网站建设
  • 百度网盟 网站定向投放网站 租用服务器价格
  • 北京 房地产 网站建设现在房子装修流行什么风格