ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

JavaでJWTを使えないか検討する #240

JavaでJWT

JWT、Json Web Tokenの略。電子的に署名することで改ざんができないJSONみたいなものをイメージするといいようです。詳しくはまだ理解できていないので適当にググってください、またはこちらの記事がわかりやすいです。

qiita.com

これを今作っている学校のサービスのAPIの認証に用いることができないかなぁと画策してました。

JavaAPIサーバーを作っているので、Javaで使えることが大前提。結論から言うと、複数のJavaで使用できるJWTのライブラリが存在するので特に問題はなさそうでした。

jwt.io

ここに載っているだけでも6個のライブラリがあるようです。

とりあえずどれがいいかもよくわからなかったので、↑のサイトを作っているAuth0が作ったライブラリのREADMEにあるコードを動かしてみました。

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.impl.crypto.MacProvider;

import java.security.Key;

public class Main {
    public static void main(String[] args) {
        Key key = MacProvider.generateKey();
        String jws = Jwts.builder()
                .setSubject("Joe")
                .signWith(SignatureAlgorithm.HS512, key)
                .compact();

        System.out.println(jws);
    }
}

こんな感じ。これを実行すると`eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJKb2UifQ.3bfRlJ97GWXpQyz_npkN6n-Kiwj8w-fo2AuemYL_yeoycMC5eEenwXlM4oCSXRcn2VqXhTruGKdPzxg2QTNGwwみたいなトークンが吐き出されるのでjwt.ioに貼ってみました。

f:id:uutarou:20180111233327p:plain

ちゃんとデコードできてるっぽい。

そして、個人的な朗報としては、このライブラリはJava7環境下でも動くっぽいです。これ大事。(本番がJava7)

f:id:uutarou:20180111233837p:plain

とりあえずライブラリと密結合しないように気をつけながらAPIに組み込んでみようかと思います。

雑談

1週間はやくね?もう明日金曜と聞いて震えた。


でんぱ組、全国ツアーの東京公演のチケットに当選した。

神。出費が…。