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

凤城市网站建设广东建设信息公开网站

凤城市网站建设,广东建设信息公开网站,如何做网站的维护和推广,需要做网站的行业✨✨谢谢大家捧场#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右#xff0c;一定要天天开心哦#xff01;✨✨ #x1f388;#x1f388;作者主页#xff1a; 喔的嘛呀#x1f388;#x1f388; ✨✨ 帅哥美女们#xff0c;我们共同加油#xff01;一起进步祝屏幕前的小伙伴们每天都有好运相伴左右一定要天天开心哦✨✨  作者主页 喔的嘛呀 ✨✨ 帅哥美女们我们共同加油一起进步✨✨  目录 引言 一、什么是单点登录SSO 二、SSO的工作原理 三、SSO的具体实现 SSO的核心概念 1. 令牌Token机制 2. 身份验证协议 SSO实现步骤 1. 选择身份验证协议 2. 创建认证服务器 3. 创建资源服务器 4. 客户端集成 总结 引言 随着互联网应用的不断发展用户需要在多个系统之间无缝切换而单点登录Single Sign-On简称SSO技术应运而生。本篇博客将深入探讨Java中如何实现单点登录通过详细代码和深度解析带领读者逐步了解SSO的原理、流程和具体实现。 一、什么是单点登录SSO 单点登录是一种身份认证的机制允许用户在访问多个相关但独立的软件系统时只需一次登录便可无缝访问所有系统。这大大提高了用户体验并简化了管理和维护的复杂性。 二、SSO的工作原理 SSO的工作原理基于令牌Token和身份验证协议。用户一旦登录系统将获得一个令牌该令牌包含了用户的身份信息。在之后的访问中用户只需提供该令牌而无需再次输入用户名和密码。 三、SSO的具体实现 SSO的核心概念 在深入代码之前让我们先理解SSO的核心概念。 1. 令牌Token机制 SSO通过使用令牌实现用户的无缝切换。用户在登录成功后获得一个令牌该令牌包含了用户的身份信息。在之后的访问中用户只需提供有效的令牌而无需再次输入用户名和密码。 2. 身份验证协议 常见的身份验证协议包括OAuth 2.0和OpenID Connect。OAuth 2.0主要用于授权而OpenID Connect在OAuth 2.0的基础上提供了身份验证的支持。 SSO实现步骤 1. 选择身份验证协议 在我们的实现中我们选择使用OAuth 2.0和OpenID Connect协议。这两者的结合提供了强大的身份验证和授权机制。 2. 创建认证服务器 认证服务器是SSO系统的核心。我们使用Spring Security OAuth2和Spring Boot来实现一个简单但强大的认证服务器。 创建认证服务器是实现单点登录SSO系统的关键步骤之一。在这里我们将使用Spring Security OAuth2和Spring Boot创建一个简单而强大的认证服务器。以下是详细的代码示例 // 认证服务器配置类 Configuration EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {Autowiredprivate AuthenticationManager authenticationManager;Autowiredprivate UserDetailsService userDetailsService;Autowiredprivate DataSource dataSource;Value(${security.oauth2.client.client-id})private String clientId;Value(${security.oauth2.client.client-secret})private String clientSecret;Value(${security.oauth2.client.authorized-grant-types})private String[] authorizedGrantTypes;Value(${security.oauth2.client.scopes})private String[] scopes;Overridepublic void configure(ClientDetailsServiceConfigurer clients) throws Exception {clients.jdbc(dataSource);}Overridepublic void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {endpoints.authenticationManager(authenticationManager).userDetailsService(userDetailsService);}Overridepublic void configure(AuthorizationServerSecurityConfigurer security) throws Exception {security.tokenKeyAccess(permitAll()).checkTokenAccess(isAuthenticated());}Beanpublic JdbcTokenStore tokenStore() {return new JdbcTokenStore(dataSource);}Beanpublic TokenStoreUserApprovalHandler userApprovalHandler(TokenStore tokenStore) {TokenStoreUserApprovalHandler handler new TokenStoreUserApprovalHandler();handler.setTokenStore(tokenStore);handler.setRequestFactory(new DefaultOAuth2RequestFactory(clientId));handler.setClientDetailsService(clientDetailsService());handler.setUseApprovalStore(true);return handler;}Beanpublic ApprovalStore approvalStore(TokenStore tokenStore) {TokenApprovalStore store new TokenApprovalStore();store.setTokenStore(tokenStore);return store;}Beanpublic ClientDetailsService clientDetailsService() {return new JdbcClientDetailsService(dataSource);}Beanpublic DefaultTokenServices tokenServices() {DefaultTokenServices tokenServices new DefaultTokenServices();tokenServices.setTokenStore(tokenStore());tokenServices.setSupportRefreshToken(true);tokenServices.setClientDetailsService(clientDetailsService());tokenServices.setAuthenticationManager(authenticationManager);return tokenServices;}Beanpublic BCryptPasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}Beanpublic OAuth2RequestFactory requestFactory() {return new DefaultOAuth2RequestFactory(clientDetailsService());}BeanPrimarypublic DefaultTokenServices defaultTokenServices() {DefaultTokenServices defaultTokenServices new DefaultTokenServices();defaultTokenServices.setTokenStore(tokenStore());defaultTokenServices.setSupportRefreshToken(true);defaultTokenServices.setClientDetailsService(clientDetailsService());return defaultTokenServices;}Beanpublic BCryptPasswordEncoder bCryptPasswordEncoder() {return new BCryptPasswordEncoder();}Beanpublic DataSourceInitializer dataSourceInitializer(DataSource dataSource) {DataSourceInitializer initializer new DataSourceInitializer();initializer.setDataSource(dataSource);initializer.setDatabasePopulator(databasePopulator());return initializer;}private DatabasePopulator databasePopulator() {ResourceDatabasePopulator populator new ResourceDatabasePopulator();populator.addScript(new ClassPathResource(schema.sql));return populator;} }上述代码中我们配置了认证服务器的各个方面包括客户端信息、用户信息、令牌存储、用户批准处理等。这是一个基础配置你可以根据实际需求进行调整和扩展。 此外为了更好地演示我们在配置中引入了一些外部配置例如client-id、client-secret、authorized-grant-types、scopes你可以在应用的配置文件中定义这些属性。 通过这个认证服务器的配置我们为SSO系统打下了坚实的基础。接下来你可以继续配置资源服务器、客户端应用并深入了解OAuth2和OpenID Connect协议的更多细节。 3. 创建资源服务器 在单点登录SSO系统中资源服务器的作用是验证令牌并提供受保护的资源。以下是使用Spring Security实现资源服务器的详细代码示例 // 资源服务器配置类 Configuration EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter {Value(${security.oauth2.resource.id})private String resourceId;Overridepublic void configure(ResourceServerSecurityConfigurer resources) throws Exception {resources.resourceId(resourceId);}Overridepublic void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers(/public/**).permitAll().antMatchers(/api/**).authenticated();} }在上述代码中我们配置了资源服务器的两个主要部分资源ID和HTTP安全性。 configure(ResourceServerSecurityConfigurer resources) 方法用于配置资源服务器的资源ID。资源ID是资源服务器标识自身的唯一标识符与授权服务器中的配置相对应。 configure(HttpSecurity http) 方法定义了资源服务器的HTTP安全性配置。在这个例子中我们允许对 /public/** 路径的请求进行公开访问而对 /api/** 路径的请求进行身份验证。 请注意你可能需要根据实际应用的需求进行调整和扩展例如更复杂的授权规则、自定义访问决策等。 为了更好地演示我们引入了一个外部配置security.oauth2.resource.id你可以在应用的配置文件中定义这个属性。 这个资源服务器配置类将帮助你在SSO系统中建立一个安全的资源服务确保只有合法的用户通过有效的令牌能够访问受保护的资源。接下来你可以继续配置客户端应用使其能够通过令牌访问资源服务器上的资源。 4. 客户端集成 在单点登录SSO系统中客户端应用需要集成认证服务器以获取令牌并访问资源服务器。以下是使用Spring Security OAuth2 Client实现客户端集成的详细代码示例 // 客户端配置类 Configuration EnableOAuth2Client public class OAuth2ClientConfig {Autowiredprivate OAuth2RestTemplate restTemplate;Beanpublic OAuth2RestTemplate restTemplate(OAuth2ProtectedResourceDetails resource) {return new OAuth2RestTemplate(resource);}Beanpublic OAuth2ProtectedResourceDetails resourceDetails() {AuthorizationCodeResourceDetails details new AuthorizationCodeResourceDetails();details.setClientId(client-id);details.setClientSecret(client-secret);details.setAccessTokenUri(http://localhost:8080/oauth/token);details.setUserAuthorizationUri(http://localhost:8080/oauth/authorize);details.setScope(Arrays.asList(read, write));return details;}Beanpublic RequestInterceptor oauth2FeignRequestInterceptor(OAuth2ClientContext oAuth2ClientContext,OAuth2ProtectedResourceDetails resource) {return new OAuth2FeignRequestInterceptor(oAuth2ClientContext, resource);} }在上述代码中我们配置了客户端的关键组件 OAuth2RestTemplate: 用于与认证服务器进行交互获取令牌等。 OAuth2ProtectedResourceDetails: 包含了客户端的配置信息如客户端ID、客户端密钥、授权服务器的地址等。 RequestInterceptor: 用于Feign客户端确保在使用Feign进行远程调用时令牌被正确传递。 在实际应用中你可能需要更复杂的配置例如刷新令牌、处理令牌错误、自定义用户信息等。这个配置类提供了一个基础的配置你可以根据具体需求进行扩展。 请注意上述代码中的URL和客户端信息应该与你的认证服务器的配置相匹配。同时你可以在应用的配置文件中定义这些属性以便更好地管理和维护。 通过这个客户端配置你的应用将能够通过OAuth2协议与认证服务器进行交互获取令牌并在需要时访问资源服务器上的受保护资源。这是SSO系统中客户端应用的关键配置。 总结 通过本文我们详细讨论了SSO的核心概念、选择了适当的身份验证协议并提供了完整的Java代码实现。实现SSO系统需要深入理解身份验证协议、使用合适的框架以及合理配置认证和资源服务器。 希望这篇博客能够为你提供深度且全面的SSO实现指南。通过这个实践你将更好地理解和应用SSO技术提升应用的用户体验和安全性。
http://www.w-s-a.com/news/588418/

相关文章:

  • 南通做网站的公司有哪些中国建筑论坛网
  • 技术支持 佛山网站建设wordpress不用ftp
  • 广州定制app开发wordpress配置搜索引擎优化
  • 兰州网站建设论坛四川建设网官网登录
  • 在线作图免费网站湖南批量出品机
  • 深圳做网站公司有哪些地方妇联加强网站平台建设
  • vps建设网站别人访问不了网页链接生成器
  • 网站建设一般要多少钱电商平台取名字大全
  • 怎么做网站封面上的图网站开发语言 微信接口
  • 免费观看网站建设优化安徽
  • 上海电商网站开发公司做婚恋网站的翻译好吗
  • 以网站建设为开题报告大数据技术就业前景
  • dw做网站字体 别人电脑显示青岛活动策划公司
  • 网站成立时间查询墨猴seo排名公司
  • 技术支持 随州网站建设苏州企业网站建设定制
  • 美食网站开发目的与意义网站开发环境选择
  • 青岛西海岸新区城市建设局网站开发板在null不可用
  • 企业信息管理系统免费seo优化个人博客
  • 做任务的设计网站泰州哪里做网站
  • 什么网站可以做设计赚钱吗南京十大软件公司排名
  • 网站开发时间进度北京有哪些著名网站
  • 深圳比较好的设计网站公司自己的网站到期域名如何续费
  • 温州做网站哪儿新云网站模版
  • 网站开发 视频存在哪检察院前期网站建设
  • 备案中的网站信息怎么填如何做分享赚钱的网站
  • 网站行程表怎么做注册公司费用要多少
  • 常见电子商务网站基本模式南山网站公司定
  • 网站搭建代码网站里面送礼物要钱怎么做代码
  • 大学英文网站建设举措wordpress 学院 模板
  • 爱 做 网站吗php网站作业模版