在JAVA中用JWT创建令牌

在JAVA中用JWT创建令牌,java,token,jwt,Java,Token,Jwt,我必须用JWT创建我的令牌,但我不知道该怎么做。你必须使用一个库。 我个人使用。 这是他们使用HS256为JWT签名的页面示例: // Generate random 256-bit (32-byte) shared secret SecureRandom random = new SecureRandom(); byte[] sharedSecret = new byte[32]; random.nextBytes(sharedSecret); // Create HMAC signer J

我必须用JWT创建我的令牌,但我不知道该怎么做。

你必须使用一个库。 我个人使用。 这是他们使用HS256为JWT签名的页面示例:

// Generate random 256-bit (32-byte) shared secret
SecureRandom random = new SecureRandom();
byte[] sharedSecret = new byte[32];
random.nextBytes(sharedSecret);

// Create HMAC signer
JWSSigner signer = new MACSigner(sharedSecret);

// Prepare JWT with claims set
JWTClaimsSet claimsSet = new JWTClaimsSet();
claimsSet.setSubject("alice");
claimsSet.setIssuer("https://c2id.com");
claimsSet.setExpirationTime(new Date(new Date().getTime() + 60 * 1000));

SignedJWT signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.HS256), claimsSet);

// Apply the HMAC protection
signedJWT.sign(signer);

// Serialize to compact form, produces something like
// eyJhbGciOiJIUzI1NiJ9.SGVsbG8sIHdvcmxkIQ.onO9Ihudz3WkiauDO2Uhyuz0Y18UASXlSc1eS0NkWyA
String s = signedJWT.serialize();
您也可以使用。 他们使用RSA对JWT(公钥+密钥)进行签名的页面示例: //生成一个RSA密钥对,该密钥对将用于JWT的签名和验证,并封装在JWK中 RsaJsonWebKey RsaJsonWebKey=RsaJwkGenerator.generateJwk(2048)

//给JWK一个密钥ID(kid),这只是礼貌的做法
rsaJsonWebKey.setKeyId(“k1”);
//创建索赔,这将成为JWT的内容
JwtClaims=新的JwtClaims();
索赔。setIssuer(“发行人”);//谁创建令牌并签名
声明。设置受众(“受众”);//令牌将发送给谁
索赔。设置未来到期时间分钟数(10);//令牌将过期的时间(10分钟后)
claims.setGeneratedJwtId();//令牌的唯一标识符
claims.setIssuedAtToNow();//颁发/创建令牌时(现在)
索赔。在过去(2)的几分钟内设置;//令牌尚未生效的时间(2分钟前)
索赔。设置主体(“主体”);//令牌所涉及的主体/委托人
索赔。setClaim(“电子邮件”mail@example.com"); // 可以添加有关主题的其他声明/属性
List groups=Arrays.asList(“第一组”、“其他组”、“第三组”);
索赔。setStringListClaim(“组”,组);//多值声明也可以工作,并最终成为一个JSON数组
//JWT是以JSON声明作为有效负载的JWS和/或JWE。
//在本例中,它是一个JWS,因此我们创建了一个JsonWebSignature对象。
JsonWebSignature jws=新的JsonWebSignature();
//JWS的有效负载是JWT声明的JSON内容
setPayload(claims.toJson());
//JWT使用私钥进行签名
setKey(rsaJsonWebKey.getPrivateKey());
//设置密钥ID(kid)头,因为这只是礼貌之举。
//在本例中,我们只有一个密钥,但使用密钥ID有助于
//促进平稳的键翻转过程
setKeyIdHeaderValue(rsaJsonWebKey.getKeyId());
//在JWT/JWS上设置签名算法,以保护声明的完整性
setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_使用_SHA256);
//签署JWS并生成紧凑的序列化或完整的JWT/JWS
//表示,它是由三个分隔的点('.')组成的字符串
//表单Header.Payload.Signature中的base64url编码部分
//如果您想对其进行加密,只需将此jwt设置为有效负载即可
//并将cty(内容类型)头设置为“jwt”。
字符串jwt=jws.getCompactSerialization();
在Erik Gillespie指出的问题中,有更多的选择。
jwt.io页面允许您粘贴生成的令牌并查看其有效负载。此外,如果您放入密钥,它会显示令牌是否完整。

您可以使用以下方法:

public String jwtToken(String name) {
    long nowMillis = System.currentTimeMillis();
    Date now = new Date(nowMillis);

    Date expireDate = new Date(nowMillis);  

    Key key = MacProvider.generateKey();

    String compactJws = Jwts.builder()

           .setSubject(name)
            .setAudience("users")
           .setIssuedAt(now)
            .setExpiration(expireDate)
            .signWith(SignatureAlgorithm.HS512, key)
            .signWith(S)
            .compact();


    return compactJws;
}

尝试使用以下url中提到的解决方案:

请在您的帖子中加入。我正在使用此()但找不到有关创建令牌的信息。所以,我不知道这个库是否允许我创建令牌,或者我是否需要使用另一个库。所以我什么都没试过,因为我不知道该怎么做。有人能帮我解决这个问题吗?感谢第一个用于我在loraserver.io中进行身份验证的工具;)
public String jwtToken(String name) {
    long nowMillis = System.currentTimeMillis();
    Date now = new Date(nowMillis);

    Date expireDate = new Date(nowMillis);  

    Key key = MacProvider.generateKey();

    String compactJws = Jwts.builder()

           .setSubject(name)
            .setAudience("users")
           .setIssuedAt(now)
            .setExpiration(expireDate)
            .signWith(SignatureAlgorithm.HS512, key)
            .signWith(S)
            .compact();


    return compactJws;
}