GitHubでJWT(Json Web Token)のセキュリティについて話題になっていたので、JWTを使うのが良い方法なのか、それとも代替のものがあるのか、そして実際にJWTにを使用したWebサービスやアプリケーションがあるのかどうかについて調べました。
JWTのセキュリティ(安全性・脆弱性・問題点)と代替のサービス
Qiitaの@take4s5iさんの記事によると、JWTの問題点は以下のとおりだそうです。
署名アルゴリズムが選択可能になっていることで以下のセキュリティホール、リスクを生み出しています。
- 署名の検証を通過できる任意のpayloadを偽造可能
- noneという「署名なし」のアルゴリズムが仕様で実装必須
- 公開鍵方式のアルゴリズムを選択すると、簡単に署名を偽造できる脆弱性がある。
- 「アルゴリズムの選択」という専門的な内容が開発者任せになっている
- 脆弱性のあるライブラリ実装が多い(多かった?)
これらの点は「署名アルゴリズムが特定の共通鍵であること」をチェックすれば回避できます。
しかしながら、仕様ではheaderに指定されたアルゴリズムを解釈・処理することを求めているので「特定のアルゴリズムしか受け付けないのは仕様非準拠である」という意見もあります。
では、何かJWT以外に代替品はあるのか、という話ですが、記事によると、
がおすすめされていました。
⇒(参照記事)JSON Web Token(JWT)って結局使っていいの?(Qiita)
実際にJWT(Json Web Token)を使用しているサービス
では、JWTは実際のWebサービスやWebアプリケーションで使用されていないのかと言えばそうでもなく、Yahoo!JAPANでの活用例が記事にまとめられていました。JWTの問題点の回避方法や、注意点、他社活用例(SORACOM、Amazon Cognito)などが詳しく網羅されています。
⇒JSON Web Token(JWT)の紹介とYahoo! JAPANにおけるJWTの活用(Y!デベロッパーネットワーク2017年12月1日)
JWTが実際に使用されていると知って納得したと同時に、セキュリティ面での対策がかなり必要そうだなという印象です。