🔥 TIL - Day 29


プロジェクトはもうすぐ終わります.今日は自分で簡単なプロジェクトを考えて、個人的な勉強をしました.
このプロジェクトでは、認証部分を実現するのも大変で、まだ不満な点が多く、後でSpringに移動して、より良い実現のためにspringでjwtを練習しました.
JavaでJWTに提供されるライブラリは、大きく2つあります.auth0で作られたJava JWToktaで作られたjjwtがあります.
📌 Okta jjwtoktajjwtから簡単にわかります.
[ Maven ]
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.2</version>
</dependency>

[ Gradle ]
implementation 'io.jsonwebtoken:jjwt-api:0.11.2'
Claimの作成方法
Strint jwtToken = Jwts.builder().addClaims()
    .Map.of(
        "exp", 
        "key1", "value1",
        "key2", "value2", ...
    )   
    .signWith(SignatureAlgorithm.HS256, "JWT_SECRET_KEY")
    .compact();
Payloadパケットメソッド(トークン復号)
Jws<Claims> jwt = Jwts.parser()
    .setSigningKey("JWT_SECRET_KEY")
    .parseClaimsJws(jwtToken);
📌 auth0 Java-JWTauth0Java JWTを簡単にご紹介します.
[ Maven ]
<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.18.2</version>
</dependency>

[ Gradle ]

implementation 'com.auth0:java-jwt:3.18.2'
Claimの作成方法
String jwtToken = JWT.create()
    .withSubject("subject"
    .withExpiresAt(new Date(System.currentTimeMillis() + ... )
    .withClaim("key2", "value2")
    .sign(Algorithm.HMAC256("JWT_SECRET_KEY"));
Payloadパケットメソッド(トークン復号)
DecodedJWT jwt = JWT.require(Algorithm.HMAC256("JWT_SECRET_KEY"))
    .build()
    .verify(jwtToken);
Java JWTとは異なり、jjwtは、鍵を必要とせずにトークンを復号する方法を提供する.
すなわち,トークン検証に失敗してもClaimを確認し,必要に応じて適切な応答を行うことができる.
DecodedJWT token = JWT.decode(jwtToken)
token.getClaims()