jwt中token认证流程
时间: 2023-11-24 18:22:25 浏览: 41
JWT(JSON Web Token)是一种基于JSON的轻量级的开放标准,用于在网络上传输被声明的安全信息。JWT由三部分组成:头部、载荷和签名。
JWT的认证流程如下:
1. 用户向服务端发送用户名和密码进行登录请求。
2. 服务端验证用户名和密码,如果验证通过则生成一个JWT token并返回给客户端。JWT token通常包含用户的一些基本信息,如用户ID、角色、过期时间等。
3. 客户端收到JWT token后,将其存储在本地,通常是在Cookie或者LocalStorage中。
4. 客户端向服务端发送请求时,需要在请求头中添加Authorization字段,值为Bearer加上JWT token,例如:Authorization: Bearer <JWT token>。
5. 服务端接收到请求后,从请求头中获取JWT token,并进行解析和验证。验证包括对JWT token的签名是否正确、是否过期等。
6. 如果JWT token验证通过,则服务端根据其中的用户信息进行相应的操作。如果验证不通过,则返回401 Unauthorized错误。
总之,JWT token通过加密的方式传输用户信息,客户端在请求时需要携带JWT token,服务端则需要对JWT token进行验证,以确保用户身份的合法性。
相关问题
jwt 和token
JWT是指json web token缩写,它可以用于RESTful接口定义,也可以用于普通的web。JWT将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。
JWT包含三个部分:Header头部,Payload负载和Signature签名。这三部分组成token,它们之间用“.”号分割。例如:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c。
Token的认证流程是这样的:用户输入用户名和密码发送给服务器,服务器验证用户名和密码,如果正确就返回一个签名过的token,浏览器客户端拿到这个token并自己保存。在后续的每次请求中,浏览器会把token作为http header发送给服务器,服务器验证签名是否有效,如果有效就认证成功,可以返回客户端需要的数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Token与Jwt详解](https://blog.csdn.net/y532798113/article/details/102813264)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
springBoot jwt 生成token
在使用Spring Boot生成JWT(JSON Web Token)的过程中,你可以按照以下步骤进行操作:
1. 首先,确保你的Spring Boot项目已经集成了相关的依赖。你可以在`pom.xml`文件中添加以下依赖:
```xml
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.2</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.11.2</version>
<scope>runtime</scope>
</dependency>
```
2. 创建一个`JwtUtil`类,用于生成JWT。你可以在该类中定义以下方法:
```java
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class JwtUtil {
private final String secret = "your-secret-key";
private final long expiration = 86400000; // 过期时间,单位为毫秒
public String generateToken(String username) {
Date now = new Date();
Date expiryDate = new Date(now.getTime() + expiration);
return Jwts.builder()
.setSubject(username)
.setIssuedAt(now)
.setExpiration(expiryDate)
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
}
public String getUsernameFromToken(String token) {
Claims claims = Jwts.parser()
.setSigningKey(secret)
.parseClaimsJws(token)
.getBody();
return claims.getSubject();
}
public boolean validateToken(String token) {
try {
Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
return true;
} catch (Exception ex) {
return false;
}
}
}
```
3. 在你的用户认证逻辑中使用`JwtUtil`类生成和验证JWT。例如,在登录成功后生成JWT:
```java
@Autowired
private JwtUtil jwtUtil;
public ResponseEntity<?> login(String username, String password) {
// 验证用户名和密码逻辑...
// 生成JWT
String token = jwtUtil.generateToken(username);
// 返回响应,包含JWT
return ResponseEntity.ok(new JwtResponse(token));
}
```
这样,你就可以使用Spring Boot和JWT来生成和验证token了。记得将`your-secret-key`替换为你自己的密钥。