springboot oauth2.0 客户端和服务端
时间: 2023-11-08 15:04:52 浏览: 165
Spring Boot提供了OAuth2.0的支持,可以轻松实现OAuth2.0的客户端和服务端。
OAuth2.0是一种授权框架,用于保护Web资源。它允许用户授权第三方应用访问他们的资源,而无需提供他们的用户名和密码。OAuth2.0有四种授权模式:
- 授权码模式
- 简化模式
- 密码模式
- 客户端模式
Spring Boot提供了OAuth2.0的客户端和服务端的支持,可以使用Spring Security OAuth2.0库来实现OAuth2.0的客户端和服务端。
OAuth2.0客户端
OAuth2.0客户端用于访问受保护的资源,以及向用户请求授权。Spring Boot提供了OAuth2.0客户端的支持,可以使用Spring Security OAuth2.0库来实现OAuth2.0客户端。
要使用OAuth2.0客户端,需要进行以下步骤:
1. 添加依赖
在pom.xml文件中添加以下依赖:
```
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
<version>2.4.0</version>
</dependency>
```
2. 配置application.yml
在application.yml文件中配置OAuth2.0客户端的信息,如下所示:
```
security:
oauth2:
client:
clientId: <client_id>
clientSecret: <client_secret>
accessTokenUri: <access_token_uri>
userAuthorizationUri: <user_authorization_uri>
clientAuthenticationScheme: form
```
其中,clientId和clientSecret是OAuth2.0服务提供商提供的客户端ID和客户端密钥;accessTokenUri是OAuth2.0服务提供商提供的访问令牌URI;userAuthorizationUri是OAuth2.0服务提供商提供的用户授权URI;clientAuthenticationScheme指定了客户端认证的方式,这里使用了form表单认证。
3. 配置SecurityConfigurerAdapter
创建一个SecurityConfigurerAdapter的子类,用于配置OAuth2.0客户端,如下所示:
```
@Configuration
@EnableOAuth2Sso
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").permitAll()
.and()
.logout().permitAll();
}
}
```
其中,@EnableOAuth2Sso注解启用OAuth2.0单点登录,configure方法用于配置HttpSecurity,这里配置了所有请求都需要认证,登录页面为/login,登出页面为/logout。
OAuth2.0服务端
OAuth2.0服务端用于保护Web资源,并授权第三方应用访问受保护的资源。Spring Boot提供了OAuth2.0服务端的支持,可以使用Spring Security OAuth2.0库来实现OAuth2.0服务端。
要使用OAuth2.0服务端,需要进行以下步骤:
1. 添加依赖
在pom.xml文件中添加以下依赖:
```
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
<version>2.4.0</version>
</dependency>
```
2. 配置application.yml
在application.yml文件中配置OAuth2.0服务端的信息,如下所示:
```
security:
oauth2:
client:
clientId: <client_id>
clientSecret: <client_secret>
accessTokenUri: <access_token_uri>
userAuthorizationUri: <user_authorization_uri>
clientAuthenticationScheme: form
resource:
userInfoUri: <user_info_uri>
```
其中,clientId和clientSecret是客户端ID和客户端密钥;accessTokenUri是访问令牌URI;userAuthorizationUri是用户授权URI;clientAuthenticationScheme指定了客户端认证的方式,这里使用了form表单认证;userInfoUri是用户信息URI。
3. 配置SecurityConfigurerAdapter
创建一个SecurityConfigurerAdapter的子类,用于配置OAuth2.0服务端,如下所示:
```
@Configuration
@EnableAuthorizationServer
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private DataSource dataSource;
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.jdbc(dataSource);
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.authenticationManager(authenticationManager);
}
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.tokenKeyAccess("permitAll()").checkTokenAccess("isAuthenticated()");
}
}
```
其中,@EnableAuthorizationServer注解启用OAuth2.0授权服务器,configure方法用于配置ClientDetailsService,这里使用了JDBC方式存储客户端信息;configure方法用于配置AuthorizationServerEndpoints,这里使用了AuthenticationManager认证管理器;configure方法用于配置AuthorizationServerSecurity,这里允许所有人访问tokenKey,只有认证过的用户才能访问checkToken。
阅读全文