Spring Cloud Oauth2是Spring Cloud生态中基于Oauth2.0协议实现的授权、认证框架。它将授权、认证、鉴权的功能进行了拆分,将获得token的过程分离出来形成一个微服务,我们可以称之为认证服务认证中心,而资源服务需要鉴权的时候可以通过Feign请求认证服务获取token后再访问资源服务。下面是搭建认证资源中心的详细攻略。
1. 创建认证服务认证中心
首先我们需要创建一个认证中心服务作为认证中心,该服务需要依赖Spring Cloud Oauth2所提供的starter,因此在pom.xml中引入如下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
接着,在认证中心服务的配置文件中,我们需要配置以下几个核心的配置项,分别是:
- 配置认证中心的信息,如认证服务的端口号、应用名称等。
spring:
application:
name: oauth-server
profiles:
active: dev
server:
port: 8200
- 配置认证中心所依赖的数据库。
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/oauth2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: root
- 配置授权类型。在OAuth2协议中,授权类型分为四种,可以对应grant_type这个参数,包括authorization_code, password, client_credentials, 和 refresh_token。在这里我们选择password这个类型,表示需要使用账号密码进行认证。
security:
oauth2:
client:
client-id: client
client-secret: secret
authorized-grant-types: password,refresh_token
scopes: read,write
- 配置用户信息与权限信息。在OAuth2协议中,用户信息和权限信息分别存储在两个表中,分别是oauth_user和oauth_authority。在这里我们使用了Mysql数据库进行存储。
security:
oauth2:
resource:
user-info-uri: http://localhost:8200/user/me
client:
client-id: client
client-secret: secret
authorized-grant-types: password,refresh_token
scopes: read,write
token:
store-type: jwt
authorization:
check-token-access: isAuthenticated()
user:
name: user
password: password
roles: ROLE_USER
2. 创建资源服务
认证中心创建成功后,我们需要再创建一个资源服务,该服务需要依赖Spring Cloud Oauth2所提供的starter,并且需要在配置文件中进行以下几个核心的配置:
- 配置资源服务的信息,如端口号、应用名称等。
spring:
application:
name: resource-server
profiles:
active: dev
server:
port: 8201
- 配置资源服务如何与认证服务进行交互,包括认证服务的URL以及认证类型等。
security:
oauth2:
resource:
user-info-uri: http://localhost:8200/user/me
client:
client-id: client
client-secret: secret
token-type: bearer
check-token-access: isAuthenticated()
- 配置资源服务所需获取的权限信息。
security:
oauth2:
resource:
user-info-uri: http://localhost:8200/user/me
client:
client-id: client
client-secret: secret
token-type: bearer
check-token-access: isAuthenticated()
resource-id: resource
prefer-token-info: true
ignored-uri-patterns: /**
filter-order: 3
3. 认证方式选择与应用
在完成上述步骤后,我们就可以启动认证服务认证中心和资源服务,并构建一个基于 Spring Cloud Oauth2 的完整系统。在此基础上,我们根据具体的业务需求,选择不同的认证方式,并在应用中实现。例如,可以选择基于 OAuth2协议的其它认证方式,或者使用单点登录(SSO)等技术。
示例一:基于Password授权方式的认证服务
package cn.merryyou.oauth2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@SpringBootApplication
public class Oauth2ServerApplication {
public static void main(String[] args) {
SpringApplication.run(Oauth2ServerApplication.class, args);
}
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
示例二:基于OAuth2协议的认证服务
package cn.merryyou.oauth2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Oauth2ServerApplication {
public static void main(String[] args) {
SpringApplication.run(Oauth2ServerApplication.class, args);
}
}
以上就是 Spring Cloud Oauth2如何搭建认证资源中心的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring cloud oauth2如何搭建认证资源中心 - Python技术站