0
点赞
收藏
分享

微信扫一扫

FusionAuth JWT

Brose 2021-09-24 阅读 104

本文介绍基于 FusionAuth JWT 的 JWT 实现方法。


目录

  • FusionAuth JWT 简介
  • 代码示例

FusionAuth JWT 简介

FusionAuth JWT 只有一个外部依赖 Jackson,不依赖于 Bouncy Castle、Apache Commons 或 Guava.

特性:

  • JWT 签名支持 HMAC、RSA 和 Elliptic Curve(椭圆曲线) 算法,包括:HS256、HS384、HS512、RS256、RS384、RS512、ES256、ES384、ES512;
  • PEM 解码 / 编码
    • 从 PEM 文件解码出私钥或公钥
    • 将私钥或公钥编码成 PEM 文件
  • JSON Web Key
    • 通过私钥构建 JWK
    • 通过公钥构建 JWK
    • 通过 PEM 构建 JWK
  • 工具类
    • 生成 2048、3072、4092 位的 RSA 密钥对
    • 生成 256、384、512 位 EC 密钥对
    • 通过 X.509 证书生成 x5tx5t#256
    • 为 SHA-256,SHA-384 和 SHA-512 生成理想的 HMAC 密码长度
    • 为 OpenID Connect 生成 at_hash 和 c_hash 声明

代码示例

package tutorial.jwt;

import io.fusionauth.jwt.Signer;
import io.fusionauth.jwt.Verifier;
import io.fusionauth.jwt.domain.JWT;
import io.fusionauth.jwt.hmac.HMACSigner;
import io.fusionauth.jwt.hmac.HMACVerifier;
import org.junit.Assert;
import org.junit.Test;

import java.time.ZonedDateTime;

public class FusionAuthJwtTest {

    @Test
    public void testHmacSha256() {
        String secret = "HMAC SHA256 SECRET";
        Signer signer = HMACSigner.newSHA256Signer(secret);
        String issuer = "Issuer";
        String subject = "Subject";
        JWT jwt = new JWT()
                .setIssuer(issuer)
                .setExpiration(ZonedDateTime.now().plusMinutes(60))
                .setSubject(subject)
                .setAudience("Audience X")
                .setNotBefore(ZonedDateTime.now().minusMinutes(60))
                .setIssuedAt(ZonedDateTime.now())
                .setUniqueId("jwt-id-1");
        String encodedJwt = JWT.getEncoder().encode(jwt, signer);
        System.out.println(encodedJwt);
        Verifier verifier = HMACVerifier.newVerifier(secret);
        JWT decodedJwt = JWT.getDecoder().decode(encodedJwt, verifier);
        Assert.assertEquals(issuer, decodedJwt.issuer);
        Assert.assertEquals(subject, decodedJwt.subject);
        // 其它校验略...
    }
}
举报

相关推荐

【JWT】JWT 整合

Springboot:JWT

JWT安全

JWT基础

JWT简介

Jwt简介

0 条评论