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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

3回答

22734閲覧

認証用トークンはクッキーに保存すべき?ローカルストレージに保存すべき?

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

6クリップ

投稿2017/07/15 09:18

編集2017/07/15 23:50

表題の通りなのですが、認証用トークン(具体的にはJWTトークン)はクッキーに保存すべきでしょうか?
ローカルストレージに保存すべきでしょうか?

クッキーに保存してリクエストヘッダーにクッキーに保存しておいたトークンを入れてリクエストを送信するといったやり方の方がセキュアでしょうか?

補足

前提として、ユーザーがログインに成功するとサーバー側から生成されたJWTトークンがクライアント側に送られてくるという仕様を想定しての話となります。そのトークンをクッキーに保存するべきか、もしくは、ローカルストレージに保存すべきかといった質問内容です。よろしくお願いいたします!

参考

https://stackoverflow.com/questions/34817617/should-jwt-be-stored-in-localstorage-or-cookie

  • localStorage is subjected to XSS and generally it's not recommended to store any sensitive information in it.

  • With Cookies we can apply the flag "httpOnly" which mitigates the risk of XSS. However if we are to read the JWT from Cookies on backend, we then are subjected to CSRF.

So based on the above premise - it will be best if we store JWT in Cookies. On every request to server, the JWT will be read from Cookies and added in the Authorization header using Bearer scheme. The server can then verify the JWT in the request header (as opposed to reading it from the cookies).

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

二つ、関連する記事を見つけたので、紹介します。

Web Storage: セッショントークンのマシな手段 ― cookieとセキュリティ面を比較してみる | インフラ・ミドルウェア | POSTD
JWTを認証用トークンに使う時に調べたこと - Carpe Diem

セキュリティ的には、どちらが完全に劣っているというわけでは無く、きちんとした対策をとっていればどちらでも問題はないようです。問題になるのはブラウザのローカルストレージ対応状況でしょう。ターゲットにしているブラウザが全て対応しているか、動作に問題があったりしないか、プライベートブラウジングなどはどうするか、などを考慮しないと、ローカルストレージが使えることを前提にするのは難しいようです。

投稿2017/07/16 00:06

raccy

総合スコア21737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/16 00:17

ご回答ありがとうございます! なるほどー、Safari系だとプライベートブラウジングの時にローカルストレージ使えないのですね。ローカルストレージ非対応のブラウザバージョンもありますしね。 ならば、トークンをクッキーに保存して、送信はリクエストヘッダーにトークン付加してってやり方でオッケーな気がしました。ありがとうございました!
guest

0

どちらでも良い気がしますが、以下のような記事を見つけました。

認証トークンをCookieに保存するのは卒業しよう
認証トークンの送信は Authorization ヘッダを使おう!という主旨の記事ですが、その場合、「流れで」localStrage を使用することになります。

その場合は、認証トークンはCookieではなくlocalStrage(またはsessionStorage)に保存することになると思います。

参考まで^^

投稿2017/07/15 23:19

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/15 23:40

ご回答ありがとうございます!リンク先記事はタイトルは保存場所についての記事のようですが、実際の内容はどこに保存するかというより、どう送信するかについての話になってるようでした。
退会済みユーザー

退会済みユーザー

2017/07/15 23:53

そうですね。なので「流れで」localStrage を使用する感じですね。 正直、私は、それぞれの保管場所の差異に関して言及できるような知識がないので、あくまでも参考まで^^
退会済みユーザー

退会済みユーザー

2017/07/15 23:59

なるほど、ありがとうございます! 質問文に書いておいた通り、「クッキーに保存してリクエストヘッダーにクッキーに保存しておいたトークンを入れてリクエストを送信するといったやり方」みたいに保存はクッキーで、送信時はAuthorization: Bearer <token>をリクエストヘッダーに付加みたいな組合せも出来るので。
退会済みユーザー

退会済みユーザー

2017/07/16 00:09

そうですね。まぁ、気持ち悪い実装ですけどw 記事は消去法っぽいロジックなので、質問の追記で書かれた箇所に関しての言及は、残念ながらないですね。 追記の「参考」で、疑問点が非常に明確になったと思います。 多分、待ってれば識者が回答つけてくれるんじゃないかなぁ。。。
退会済みユーザー

退会済みユーザー

2017/07/16 01:41

ローカルストレージが使用出来るという前提は難しいみたいなので、消去法でクッキー保存、Bearerスキームでトークンをヘッダーに付加してそーしん!!が良さそうでした。
退会済みユーザー

退会済みユーザー

2017/07/16 06:28

保存に cookie を使用するのであれば、送信も cookie を使用するのが普通だと思いますが?
退会済みユーザー

退会済みユーザー

2017/07/16 12:12

普通かどうかというより、何か不都合やデメリットはありますでしょうか? クッキーでの送信はクロスドメイン制約もあるしなー。
退会済みユーザー

退会済みユーザー

2017/07/16 22:11

普通でないことそのものがデメリットです。 一般的に、知見が多くありません。 それよりも、こちらがかなりきな臭い気がします^^; > クッキーでの送信はクロスドメイン制約もあるしなー。
guest

0

一般論ですが、サーバーの負荷が気にならないようなユーザー数なら、セッション機能を使う、つまりローカルストレージに保存すれば簡単でしょう。
ユーザー数が多く、サーバーの負荷が大きくなり応答が遅くなったり、フリーズする可能性があるのなら、クッキーを活用すればよいでしょう。ただし、ユーザー側のブラウザがクッキーをブロックしている場合があるので、その際の対応を考慮する必要があります。例えば、あらかじめユーザーに所定のドメインネームのクッキーは許可するように設定させておくとか、クッキーがブロックされたときだけ、セッション処理に頼るとか、クッキーがブロックされたらエラーのメッセージを応答するようにするとかです。

投稿2017/07/15 19:51

seastar3

総合スコア2287

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/15 23:20

ちょっとローカルストレージの認識に相違があるように思えます。 質問者は、ブラウザのローカルストレージを指しているんじゃないかなぁ。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問