1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JWT認証について

Posted at

はじめに

今までユーザーとしてなにげなく利用していた認証について、ユーザー認証を伴うAPIをLaravelで開発をするために学ぶ機会がありました。認証については、なんとなくそれっぽい認証風なものであったり、ライブラリを雰囲気で利用していただけでした。
この機会に認証のJWT認証について、抽象的なレベルでも理解できればと思いまとめてみます。
初学者としての知識の範囲内による理解をまとめた記事ですので、間違いなどがあるかもしれませんので、ご指摘いただければ幸いです。

JWTとは

  • JSON Web Token(JWT)
  • JWTは、HTTPヘッダーにクエリパラメータなどの付加情報(ペイロード)を載せられるように
    1. JSONデータをURLセーフする方法を規定したもの => JSONデータをBASE64URLエンコードする
    2. JSONデータをコンパクトにする方法を規定したもの => よく使用されるデータ項目を略称にして、JSONキーを短くするこれによってJSONデータをコンパクトにする
  • Claim(クレーム)
    JWTではJSONのデータ項目(キーと値のペア)をClaim(クレーム)と呼ぶ
    このようにクレームとして定義された情報をエンコードしてデータを小さくして、HTTPヘッダーやクエリパラメータへ載せられるようにする。

JWSとは

JWTはBASE64URLエンコードされているだけなため、セキュリティ面ではなにも担保されていない
BASE64URLデコードすればすぐにもとのデータ形式に戻すことができるし、改ざんも可能
この改ざんを防止(改ざんを検知する仕組み)する手段がJWS
JWSは改ざん自体を防ぐものではなく、改ざんされたJWSどうかを検知することができる
JWSの仕組み

  1. HTTPヘッダーとペイロード(ヘッダーに載せたいデータ)をBASE64URLでエンコードする
  2. 1のエンコードしたものを.でくっつける
  3. 2の結果を暗号鍵とヘッダーのalgに指定された方式で暗号化して、BASE64URLでエンコードする
  4. 2と3の結果を.でくっつける
  5. エンコードされたヘッダー.エンコードされたペイロード.エンコードされた暗号鍵とヘッダーのalgに応じて暗号化された前二つの情報(トークン)

JWSの検証

JWSの仕組み上、前の二つの情報はBASE64URlでエンコードされているだけなため、情報を確認することは簡単
改ざん自体も可能。しかし3番目の情報に関しては不可能

  • 暗号鍵は信頼している相手しか持っていない
  • 暗号化した内容は同じ暗号鍵を持っていなければ復号化できる
    上記の2点から信頼した相手からのJWSであれば、復号化した情報の内容が改ざんされていないことになる。

まとめ

今回JWTについて表面的ですが、まなぶことで認証情報に対してどのように開発をするのか?ということを考える幅が広がり、思考が点ではなく線として進められる感覚が増えました。
知識が増えることで、開発の視野を広げられる感覚が開発の楽しさを感じさせてくれるなと実感しました。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?