SSO设计
Spring Security是一个功能强大、可定制的身份验证和访问控制框架.Spring Security OAuth2是一个基于Spring框架支持第三方应用授权的工具组件。通过使用Spring Security OAuth2,我们可以在商家后台中进行单点登录(SSO)设计,从而为多个微服务应用的系统集成,使用统一的安全控制管理。
SSO设计分为服务端和客户端两大部分。SSO服务端为每个应用提供了统一的访问控制和授权认证服务,是一个Web UI微服务应用,在模块merchant-sso中进行开发,包含了用户登录设计、主页设计和认证服务设计等方面的内容。SSO客户端是指为用户提供本地服务的程序
SSO的基本配置
SSO的基本配置与一般的Web UI应用项目配置基本相同,即在 Web UI应用项目配置的基础上,增加 Spring Cloud OAuth2的依赖引用,代码如下所示:
<dependency>
<group Id>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
这个组件已经包含了Security 和OAuth2两套组件体系,其中,Security提供了访问控制功能,OAuth2提供了第三方应用授权认证的服务。
在应用的配置文件 application.yml中,设定SSO应用的服务端口,并设置一个cookie保存用户的登录信息,代码如下所示:
server:
port:8000
session:
cookie:
name: SESSIONID
为保证第三方应用在授权之后能够被正常访问,我们必须在配置文件中增加接入SSO客户端返回地址的列表,并使用正确的格式“http:/l域名或IP:端口/login”进行设定,代码如下所示;
#SSo客户端返回地址的列表ssoclient:
redirecturis:
- http://localhost:8081/login- http://127.0.0.1:8081/1ogin
sso第三方应用授权设计
为了给接入SSO的第三方应用(这里指接入SSO服务的其他微服务应用)进行授权,我们创建了一个配置类AuthServerConfig,它继承了AuthorizationServerConfigurerAdapter,代码如下所示:
@Configuration
@EnableAuthorizationServer
@EnableConfigurationProperties(clienturls.class)
public class authServerConfig extends AuthorizationServerConfigurerAdapter
CAutowired
private Clienturls clienturls;
@Override
public void configure (AuthorizationServerSecurityConfigurer oauthServer)throws Exception {
oauthServer.tokenKeyAccess( "permitAll ()")
.checkTokenAccess("isAuthenticated()");
@override
public void configure (ClientDetailsServiceConfigurer clients) throwsException {
clients.inMemory()
.withClient ( "ssoclient")
.secret(passwordEncoder ().encode ("ssosecret")).authorizedGrantTypes ("authorization_code").scopes ( "user_info")
.autoApprove(true)
.redirectUris(clienturls.getRedirecturis());
@Bean
public JwtAccessTokenConverter jwtAccessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();converter. setSigningKey ( "demoSige");
return converter;
}
aoverride
public void configure(AuthorizationServerEndpointsConfigurer endpoints)throws Exception {
endpoints.accessTokenConverter(jwtAccessTokenConverter());
}
@Bean
public BCryptPasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
在上面的配置类中,包含以下主要功能:
(1)使用注解@EnableAuthorizationServer 开启 SSO服务器的功能。(2)重写第一个configure,开启使用Token进行授权的功能。
(3)重写第二个 configure,为客户端指定表单页面授权的方式,即 authorization_code,并且设定客户端授权时使用的用户名和密码分别为ssocli

本文介绍了如何在微服务架构中实现单点登录(SSO)设计,重点讲解了使用Spring Security OAuth2框架进行SSO服务端和客户端的配置。内容包括SSO的基本配置、第三方应用授权设计、登录认证设计以及SSO主页设计。通过自定义用户详情和服务,实现了登录验证和权限管理,确保了接入SSO的第三方应用的安全访问。
最低0.47元/天 解锁文章

2302

被折叠的 条评论
为什么被折叠?



