token前后端怎么使用
时间: 2024-04-02 10:34:30 浏览: 17
Token是一种用于身份验证的令牌,常用于前后端分离的应用中。下面是前后端如何使用Token的简要流程:
1. 用户在前端输入用户名和密码进行登录,并将这些信息发送到后端。
2. 后端验证用户信息,如果验证通过,就生成一个Token并返回给前端。
3. 前端收到Token后,将其保存在本地,通常使用浏览器的localStorage或sessionStorage。
4. 前端在与后端进行交互时,将Token添加到请求头中,通常使用Bearer Authentication Scheme,即在请求头中添加Authorization: Bearer <token>。
5. 后端在收到请求时,会验证Token的有效性,如果验证通过,就会返回相应的数据。
6. 如果Token过期或者失效,前端需要重新向后端请求新的Token,然后再次发送请求。
需要注意的是,Token的生成和验证需要使用加密算法,以确保Token的安全性。同时,Token的有效期也需要根据具体情况进行设置,以免出现安全漏洞。
相关问题
springboot前后端使用token验证
在前后端分离的架构中,使用 Token 验证是一种常见的身份验证方式。下面是 Spring Boot 前后端使用 Token 验证的一般步骤:
1. 在后端生成 Token 并返回给前端。可以使用 JSON Web Token(JWT)等技术生成 Token。
2. 前端将 Token 存储在客户端(如 localStorage)。每次向后端发送请求时,在请求头中添加 Token。
3. 后端对请求进行拦截,验证 Token 是否有效。
下面是一个简单的示例:
1. 后端生成 Token
```java
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class TokenUtil {
private static final long EXPIRATION_TIME = 864_000_000; // 10天
private static final String SECRET = "secret"; // 这个要保密
private static final String TOKEN_PREFIX = "Bearer";
private static final String HEADER_STRING = "Authorization";
public static String generateToken(String username) {
Date expirationDate = new Date(System.currentTimeMillis() + EXPIRATION_TIME);
return Jwts.builder()
.setSubject(username)
.setExpiration(expirationDate)
.signWith(SignatureAlgorithm.HS512, SECRET)
.compact();
}
public static String getUsernameFromToken(String token) {
return Jwts.parser()
.setSigningKey(SECRET)
.parseClaimsJws(token)
.getBody()
.getSubject();
}
}
```
2. 后端验证 Token
```java
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class JwtAuthorizationFilter extends BasicAuthenticationFilter {
private UserDetailsService userDetailsService;
public JwtAuthorizationFilter(AuthenticationManager authenticationManager, UserDetailsService userDetailsService) {
super(authenticationManager);
this.userDetailsService = userDetailsService;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
String header = request.getHeader(HEADER_STRING);
if (header == null || !header.startsWith(TOKEN_PREFIX)) {
chain.doFilter(request, response);
return;
}
String token = header.replace(TOKEN_PREFIX, "").trim();
String username = TokenUtil.getUsernameFromToken(token);
UserDetails userDetails = userDetailsService.loadUserByUsername(username);
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
userDetails, null, userDetails.getAuthorities());
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
chain.doFilter(request, response);
}
}
```
3. 前端存储 Token
```javascript
// 登录成功后获取 Token 并存储
axios.post('/api/login', {
username: 'test',
password: 'test'
}).then(response => {
localStorage.setItem('token', response.data.token);
});
// 每次请求时添加 Token 到请求头
axios.get('/api/user', {
headers: {
Authorization: 'Bearer ' + localStorage.getItem('token')
}
});
```
这是一个简单的示例,实际应用中需要根据具体情况进行修改。
前后端jwt token 刷新
在前后端分离的架构中,JWT令牌的通常涉及到端和后端之间的协作。以下是一种常见的前后端JWT令牌刷新的实现方式:
1. 在用户登录时,后端生成一个访问令牌(Access Token)和一个刷新令牌(Refresh Token)。访问令牌用于进行身份验证和授权,而刷新令牌用于后续的令牌刷新操作。
2. 后端将访问令牌和刷新令牌一起返回给前端,前端将它们存储在安全的地方(如HTTP Only Cookie或本地存储)。
3. 在每个请求中,前端将访问令牌作为身份验证凭证发送到后端。
4. 当访问令牌过期时,后端返回一个特定的HTTP响应状态码(例如401 Unauthorized)给前端。
5. 前端接收到过期响应后,使用存储的刷新令牌发送一个刷新令牌请求到后端。
6. 后端验证刷新令牌的有效性,并生成一个新的访问令牌返回给前端。
7. 前端接收到新的访问令牌后,更新存储的访问令牌,并使用新的访问令牌重新发送原始请求。
请注意,以上步骤中的具体实现方式会根据你使用的前端框架和后端技术而有所不同。以下是一些常见的实现细节:
- 在前端,你需要实现一个拦截器或中间件,用于在每个请求中添加访问令牌,并处理过期响应。
- 在后端,你需要实现一个刷新令牌的API端点,用于接收刷新令牌请求并生成新的访问令牌。
- 在后端,你需要验证刷新令牌的有效性,通常是通过检查刷新令牌的签名和有效期等信息。
总结起来,前后端JWT令牌的刷新可以通过前端发送刷新令牌请求到后端,后端验证刷新令牌并生成新的访问令牌,最后前端使用新的访问令牌重新发送原始请求来实现。这样可以确保用户持续被授权且不需要重新登录。