java springboot oauth2 JWT
时间: 2024-11-02 10:02:14 浏览: 11
在Java Spring Boot中,OAuth2(开放授权)是一种用于授权和验证第三方应用程序访问资源的协议,而JWT(JSON Web Token)则是一种轻量级的身份验证机制,通常用来在网络间安全地传输信息。
Spring Boot OAuth2 JWT集成允许你创建一个基于JWT的安全API,步骤如下:
1. **添加依赖**:首先,你需要在你的`pom.xml`或`build.gradle`文件中添加Spring Security和Spring Cloud Oauth2的相关依赖。
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
```
2. **配置**: 创建一个OAuth2服务器配置类,如`SecurityConfig`,配置认证器、令牌生成器等。例如,使用Resource Server模式,你需要配置JWT验证器。
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtTokenProvider jwtTokenProvider;
@Bean
public JwtAuthenticationTokenFilter authenticationTokenFilter() {
return new JwtAuthenticationTokenFilter(jwtTokenProvider);
}
// ...其他配置
}
```
3. **JWT配置**: 配置JWT相关的属性,如加密密钥、有效期等,这通常会在一个独立的配置类中完成。
```java
@Configuration
public class JwtConfig {
private static final String SECRET = "your-jwt-secret";
@Value("${jwt.header}")
private String tokenHeader = "Authorization";
@Bean
public JwtEncoder jwtEncoder() {
NimbusJwtEncoder encoder = new NimbusJwtEncoder();
encoder.setKeyPairGenerator(new JwkGenerator().setAlgorithm("RS256").generate());
encoder.setSigningKey(SECRET);
return encoder;
}
}
```
4. **创建JWT Filter**: 这个filter负责从HTTP请求头中获取JWT并进行验证。
5. **保护控制器方法**: 使用`@PreAuthorize`注解来保护你的REST API端点,只有携带有效JWT的请求才能访问。
```java
@RestController
@RequestMapping("/api")
public class ProtectedController {
@GetMapping("/protected")
@PreAuthorize("#oauth2.hasScope('read')")
public ResponseEntity<String> protectedEndpoint() {
return ResponseEntity.ok("You are authorized");
}
}
```
阅读全文