5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

expressにJWTを導入してみた

Posted at

入社研修でツイッターのクローンアプリを作って、その時に初めて使った技術についてまとめていきたい

今回はjwtについて色々書いていきます。
ほとんどJTWとは?みたいな話で、実際に使ってみた的な内容ではありません。

JWTとは

jwt(ジョット)とは、JSONに電子署名をして、URL-safeな文字列として表現したものです。
電子署名されているので改ざんされているかが検知できるようになります。

JWTの構造

jwtはHeader、Payload、Signatureの三層構成でできています。
一つづつ解説していきます。

Header

どんな方法でハッシュ化されるかとかが書かれている場所

{
  "alg": "HS256",
  "typ": "JWT"
}

上のオブジェクトは適当に発行したJWTのHeaderです。
HS256っていう暗号化アルゴリズムを使ってハッシュ化しますよーってことが書かれている。
typはトークンのタイプを指定している。特に指定する必要がなければデフォルトのJWTでおっけー

jwtのクレームには予約済みクレーム名とパブリッククレーム名、プライベートクレーム名の三種類がある。

Payload

有効期限とかユーザーIDとか、クライアントとサーバーで共有したい情報を入れる場所

予約済みクレーム名

node.jsで使う時の指定法も一応入れた

クレーム名 説明 nodeで使う時
iat tokenが発行された時間 デフォルトで勝手に入る
exp tokenの有効期限 expiresIn
iss token発行者の名前 issuer
aud どのクライアント向けに発行されたトークンであるかの識別子 audience
jti トークンの固有 ID jwtid
sub ユーザーの識別子 subject
nbf JWTが有効になる日時 notBefore

パブリッククレーム名

ここから引用

クレーム名は JWT の利用者によって自由に定義することができる. しかしながら, 衝突をさけるために, いくつかのクレーム名は IANA JSON Web トークンクレームレジストリ Section 9.1 に登録するか, 耐衝突性を持つ名前空間を含むパブリック名にすべきである (SHOULD). それぞれの場合において, 名前あるいは値の定義者は, クレーム名を定義するために用いる名前空間の一部が自身の管理下にあることを保証できるよう, 妥当な措置を講じる必要がある.

プライベートクレーム名

ここから引用

JWT の作成者および利用者は, 相互に同意のもとで, 予約済クレーム名 Section 4.1 でもパブリッククレーム名 Section 4.2 でもないプライベートクレーム名を用いてもよい (MAY). パブリッククレーム名とは異なり, プライベートクレーム名は衝突の可能性があり, 慎重に使用する必要がある.

Signature

HeaderとClaimをハッシュ化したもの。

サーバサイドでしか知らないシークレットキーでハッシュ化する為、HeaderとPayloadの内容が推測できたとしても、Signatureを第三者が生成することは不可能である。サーバサイドではクライアントから送られてきたtokenのSignatureを検証することで、そのtokenが改ざんされているかどうかを判定することができる。

まとめ

こんな感じですね。
まだまだ理解が甘いところがあるので、実務で実際に使っていって理解を深めていきたいなーと思います。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?