[Java] ES256(ECDSA256)算法生成Json Web Token(JWT)并校验

本文介绍了如何使用Java-JWT库生成和验证JWT,包括生成本地的公私钥对、创建自定义ECDSAKeyProvider以及构造Header、Payload并用密钥签名JWT,最后通过jwt.io校验JWT的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JWT详细内容参考官网: jwt.io , 同时可以快速校验我们生成的JWT是否正确

引入JWT依赖

	<dependency>
	    <groupId>com.auth0</groupId>
	    <artifactId>java-jwt</artifactId>
	    <version>4.4.0</version>
	</dependency>

生成本地密钥对(公/私钥)

如果本地已生成则跳过此步骤, 生成的密钥仅用于练习
如果涉及到隐私相关的公私钥最好不要在这使用, 谨防泄露

// 一个JWT ES256的测试类
public class JwtEs256Test {
   
	// ES256公钥
    private ECPublicKey publicKey;
    // ES256私钥
    private ECPrivateKey privateKey;
	// 密钥id
	private final String keyId = "key-for-test";
	
	/**
	* 生成密钥对
	* 此处是代码生成的方式, 另外jdk中也有工具可以在命令行生成, 这里不做展开
	*/
	private void generateKeyPair() {
   
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
        ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256r1");
        keyGen.initialize(ecSpec);
        KeyPair keyPair = keyGen.generateKeyPair();
        this.publicKey =  (ECPublicKey) keyPair.getPublic();
        this.privateKey = (ECPrivateKey) keyPair.getPrivate();
        
        // (可选) 如果想查看密钥内容则执行, 并复制到文件中保存, 本例仅保存在内存中
        Base64.Encoder encoder = Base64.getEncoder();
        System.out.println(encoder.encodeToString(publicKey.getEncoded()));
		System.out.println(encoder.encodeToString(publicKey.getEncoded()));
    }
}

生成KeyProvider

/**
* JwtEs256Test
* 生成自定义ECDSAKeyProvider 关联之前生成的密钥对
*/
private ECDSAKeyProvider getKeyProvider() {
   
	return new ECDSAKeyProvider() {
   
		@Override
        public ECPublicKey getPublicKeyById(String s) {
   
            try {
   
				return new ECPublicKeyImpl(publicKey.getEncoded());
			} catch (Exception e) {
   
				e.printStackTrace();
			}
        }

        @Override
        public ECPrivateKey getPrivateKey() {
   
			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值