devise-jwtを利用してDeviseでJWTトークンによる認証を行う
はじめに
Vue.jsやAngularなどのバックエンドとしてRailsを利用する際に悩むのが、認証周りの実装方法です。せっかくRailsを利用しているのですから、叶うことならイイ感じのgemを利用して、サクッと形にしてしまいたいところでしょう。
取り分け、Deviseを利用しようと考えている、あるいは既に利用している場合など、自前で書くのは面倒だなぁと思います。そういった時に便利なのが、devise-jwtというgemでございます。
使い方
インストールはGemfileにパッケージ名を記載してbundle installするだけです。
gem install devise-jwt
必要な設定はDeviseの初期化と併せて行います。README.mdにはsecretの指定のみありますが、他に:expiration_time :dispatch_requests :revocation_requests aud_headerなどが指定できるみたいですね。
(参考:devise-jwt/lib/devise/jwt.rb)
トークンの失効戦略については、幾つか選択肢が用意されているようです。もっとも導入が簡単なのは、JTIMatcherではないでしょうか。Deviseの対象モデルに以下の通り、その指定を入れます。
また、マイグレーションファイルを作成して、同時にモデルに必要なカラムを追加します。
以上で完了です。Deviseにログインのリクエストを送ると、レスポンスのAuthorizationヘッダーにJWTトークンが付与されて返されるようになります。
補足
注意事項としては、こちらのgemはクッキーの利用が不可能である場合、その認証をAuthorizationヘッダーに切り替える機能を提供しているという点です。もしも同一ドメインへのアクセスに対して、クッキーが乗ってきている場合、そちらが優先されるそうです。