当前位置: 首页 > 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.hkea.cn/news/14545185/

相关文章:

  • 网站后台默认用户名wordpress 4.7.3 主题
  • 网站icp备案网址顶尖网站建设公司
  • 网站的站外优化网络优化工程师能干一辈子吗
  • 富阳住房和城乡建设部网站网站建设与seo优化的公司
  • 姜堰区网站建设境外网站
  • 企业网站建设该怎么描述临城网站建设
  • 三明网站建设tudoulywordpress省理工大学
  • 有哪些外贸网站浙江广厦建设职业技术学院网站
  • 怎么做网上卖菜网站企业做网站推广产品需要多少钱
  • 外汇网站建设制作wordpress访问格式丢失
  • 网站建设廴金手指花总壹陆企业建站找哪家
  • 做网站一般多钱潍坊市网站建设公司
  • 做网站横幅的图片做网站外贸怎么找客户
  • 猪八戒网站 怎么做兼职设计师培训班多少钱一个月
  • 国外怎么做网站网站开发类参考文献
  • 烟台房地产网站建设网站开发周期表
  • 全国做的最棒的网站网页设计图片怎么居中对齐
  • 怎样做门户网站宁波网站推广优化公司
  • 广州建网站开发seo型企业网站wordpress 产品货号
  • 合肥网站建设电话直播网站开发多少钱
  • 手机网站优化公司wordpress 禁用修订版本
  • 访问国外网站很慢泉州网站建设推广服务
  • 网站制作的页面比例百度指数功能有哪些
  • 宁德网站建设做推广的装修网站
  • 临沂做网站建设公司统一登录入口
  • 域名备案的网站建设方案书模板网站备案查询工信部管理系统
  • gta5办公室网站建设中搭建一个网站多少钱哈尔滨电脑
  • 福州小型网站建设qq网页版在线登录
  • 一键发布多个自媒体平台seo排名优化seo
  • 进入公众号免费获取验证码杭州seo公司