質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.79%

サーバサイドをAPIにした時のログインクッキーの保存

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 258

iwato_s

score 15

railsAPI + Vueで会員登録機能のあるwebサービスを作成中です。

ログインしているという状態を判別する際
APIの時には以下のような処理をするという認識であっているのでしょうか

  1. ブラウザからログインをする。
  2. APIでユーザDBにクッキー様文字列を保存し、ブラウザに同様の文字を送信する。
  3. ブラウザで受け取った文字列をクッキーに保存する。
  4. 以降のページ遷移時にはブラウザのクッキー値とDBのクッキー値を比較し、一致する場合にログインしている状態と判断する。

上記のやり方以外の方法、セキュリティ面等でよりよい方法があれば教えていただきたいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • urbainleverrier

    2019/04/07 01:24

    セキュリティや暗号については素人ですが、クッキーが違います。
    クッキーはhttpヘッダに付随されており、暗号化されたセッション情報を保持しています。もしユーザー側が認証サーバーに認証して欲しいのであればhttp通信時にその都度クッキーをhttpヘッダに含める必要があります。一方サーバー側は、ユーザーが送りつけてくるクッキー情報をその都度自前の鍵で復号化します。okならそのユーザーを認証します。
    余談ですが、cookieにはサイズに上限があるので、通常ユーザーidを入れてあげます。それ以外に、ユーザーから送られてくる通信を重ねるにつれ、ユーザーの状態の変化を表現したいのであれば、セッション情報としてデータベースに保管します。

    キャンセル

  • iwato_s

    2019/04/07 10:53

    回答ありがとうございます!
    ブラウザからクッキー情報をAPIに渡す際はhttpヘッダにクッキーを含めるということはわかったんですが、
    > 一方サーバー側は、ユーザーが送りつけてくるクッキー情報をその都度自前の鍵で復号化します。okならそのユーザーを認証します。
    がの具体的な方法がよくわかりません。DBにクッキー情報を保存しておくというのは間違いなのでしょうか。

    キャンセル

  • iwato_s

    2019/04/07 11:22

    APIではないですがこれをみる限りDBにトークンを保存する必要がありそうですね。
    https://railstutorial.jp/chapters/advanced_login?version=5.1#sec-remember_token

    キャンセル

  • urbainleverrier

    2019/04/07 14:48 編集

    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週間程度に設定し、万が一盗まれた場合はその期限までは、仕方がないよね、でもその期限以降はダメですよ、じゃないでしょうか。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る