返回

JWT,快速上手,无需专业!

后端

JWT入门指南:从零到精通,尽在掌握!

什么是JWT?

JWT(JSON Web令牌) 是一种轻量级、自包含的令牌,用于在不同的系统或应用程序之间安全地传输信息。它常被用于API身份验证、单点登录和授权等场景。

JWT结构

JWT由三个部分组成:

1. Header(头部) :指定令牌类型和加密算法。
2. Payload(有效载荷) :包含需要传输的数据,如用户信息、权限等。
3. Signature(签名) :使用私钥对头部和有效载荷进行签名,以确保令牌的完整性和真实性。

生成JWT令牌

生成JWT令牌需要使用JWT库。这里我们使用流行的jsonwebtoken库。

代码示例:

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

public class JwtGenerator {

    public static String generateJwt(String username) {
        long expirationTime = System.currentTimeMillis() + 600000;  // 设置令牌有效期为10分钟

        return Jwts.builder()
                .setHeaderParam("typ", "JWT")
                .setAlgorithm(SignatureAlgorithm.HS256)
                .setClaims(Jwts.claims().setSubject(username))
                .setExpiration(new Date(expirationTime))
                .signWith(SignatureAlgorithm.HS256, "secretKey")
                .compact();
    }
}

验证JWT令牌

验证JWT令牌同样需要JWT库,同样我们使用jsonwebtoken

代码示例:

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

public class JwtValidator {

    public static boolean validateJwt(String token) {
        try {
            Jwts.parser().setSigningKey("secretKey").parseClaimsJws(token);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

应用场景

1. API身份验证 :JWT可以用于API身份验证,服务端验证客户端请求中的JWT令牌,以确定用户的身份和权限。
2. 单点登录 :JWT可以实现跨多个应用程序的单点登录,用户只需在一个应用程序中登录,即可访问其他关联应用程序。
3. 授权和访问控制 :JWT可以包含用户的角色和权限信息,从而实现基于JWT的授权和访问控制。

常见问题解答

1. JWT是否安全?

JWT本身是安全的,但其安全性取决于使用的加密算法和密钥管理。

2. JWT的有效期是多久?

JWT的有效期由颁发者设置,通常在几分钟到几小时不等。

3. 如何防止JWT伪造?

使用强加密算法和私钥对JWT签名可以防止伪造。

4. JWT可以在多个设备上使用吗?

JWT可以在多个设备上使用,但前提是这些设备都持有相同的私钥。

5. JWT是否可以包含敏感信息?

JWT可以包含敏感信息,但建议使用其他更安全的方法存储高度敏感数据。