railsAPI + Vueで会員登録機能のあるwebサービスを作成中です。
ログインしているという状態を判別する際
APIの時には以下のような処理をするという認識であっているのでしょうか
- ブラウザからログインをする。
- APIでユーザDBにクッキー様文字列を保存し、ブラウザに同様の文字を送信する。
- ブラウザで受け取った文字列をクッキーに保存する。
- 以降のページ遷移時にはブラウザのクッキー値とDBのクッキー値を比較し、一致する場合にログインしている状態と判断する。
上記のやり方以外の方法、セキュリティ面等でよりよい方法があれば教えていただきたいです。
セキュリティや暗号については素人ですが、クッキーが違います。
クッキーはhttpヘッダに付随されており、暗号化されたセッション情報を保持しています。もしユーザー側が認証サーバーに認証して欲しいのであればhttp通信時にその都度クッキーをhttpヘッダに含める必要があります。一方サーバー側は、ユーザーが送りつけてくるクッキー情報をその都度自前の鍵で復号化します。okならそのユーザーを認証します。
余談ですが、cookieにはサイズに上限があるので、通常ユーザーidを入れてあげます。それ以外に、ユーザーから送られてくる通信を重ねるにつれ、ユーザーの状態の変化を表現したいのであれば、セッション情報としてデータベースに保管します。
回答ありがとうございます!
ブラウザからクッキー情報をAPIに渡す際はhttpヘッダにクッキーを含めるということはわかったんですが、
> 一方サーバー側は、ユーザーが送りつけてくるクッキー情報をその都度自前の鍵で復号化します。okならそのユーザーを認証します。
がの具体的な方法がよくわかりません。DBにクッキー情報を保存しておくというのは間違いなのでしょうか。
APIではないですがこれをみる限りDBにトークンを保存する必要がありそうですね。
https://railstutorial.jp/chapters/advanced_login?version=5.1#sec-remember_token
cookieとはhttpを使用した通信の中に存在するものです。dbにはcookieに保存しきれない、セッション情報を保存する場合があります。
cookieの情報を記憶するのは、ユーザーが操作するブラウザの役目です。サーバーから送られてきたhttpレスポンスのうち、cookieは別途大切に保管し、同じサーバーにアクセスする場合のみ、自動的にcookieを添付してくれます。これについて考える必要はありません。
remenber me機能についてはうる覚えです。
https://github.com/plataformatec/devise/blob/v4.6.2/lib/devise/strategies/rememberable.rb#L7
これは復号化できるcookieが送られてくる場合のみ通用します。通常、cookieには有効期限があります。
ユーザーが熱心で、cookieの有効期限とは異なる、独自に設定した期限までに定期的にアクセスしてくれる場合は、cookieの有効期限を都度引き伸ばすというものだったと思います。ただ、cookieは盗まれるとその時点でなりすましになりますので、普通はやりません。大企業でなければ、cookieの有効期限を2週間程度に設定し、万が一盗まれた場合はその期限までは、仕方がないよね、でもその期限以降はダメですよ、じゃないでしょうか。
あなたの回答
tips
プレビュー