1

this article from Stormpathに記載されているメカニズムを使用して、JWTベースのシングルサインオンシステム(同じドメインのいくつかの単一ページアプリケーションのため、app1.mydomain.com,app2.mydomain.comauth.mydomain.comなど)を実装し始めています。安全なCookieストレージを使用したJWTステートレスサインオン:ログアウトを実装する方法は?

署名されたJWTトークンをXSS攻撃から保護するために、トークンを安全な(HTTPSのみ)およびHTTPのみのクッキーに保存したいと考えています。 SPA自体は、応答本体からユーザー情報を取得します。

私の主な質問は、クッキーがJSコードからアクセスできないため、JavaScriptで「ログアウト」機能を実装する方法です。

私は、クッキーを失効させるサーバコールを行う必要があると推測しています。それを行うクライアント側の純粋な方法はありますか?

+0

有効期限を過ぎてサーバー側のログアウトを処理しますか? – JEY

+0

@ JEY:はい、それは私が頑張ったものです。クライアント側のみのソリューションがあるかもしれないと思っていました。 –

答えて

2

すでに提案されているユーザーJEYのように、サーバー側でクリーンアップを行うのが最善の方法です。

さらに、私は可能性についてこの点を拡張してコメントには合わないようにしたいと考えました。

トークンストレージを選択するブラウザベースのアプリケーションを扱う場合は、ほとんどあなたの毒ゲームを選択します。セキュアなHTTP専用Cookieを使用すると、XSSの脆弱性がトークンの公開につながる心配はありません。ただし、XSSに脆弱ではないことを確認する必要があります。

これは実際の作業を保存しないことを意味し、XSSによって侵害された場合でも少なくともトークンは安全であるという曖昧な感覚を得るだけです。

一方、CSRFはあなたのレーダー上にある必要があるものです。ここでは物事が面白くなるかもしれませんが、CSRFがダブル・サブミット・クッキーを防止するための簡単な方法は、implemented in such ways that they are virtually useless in the presence of exploitable XSS vulnerabilitiesたとえば、子ドメイン。

クッキーにトークンを格納するのは間違っているとは言いませんが、同様にウェブストレージに格納することもできます。どちらの場合も、あなたの選択の結果とそれぞれがもたらす可能性を理解する必要があります。

この場合、Webストレージはクライアント側の視点からログアウトシナリオを簡素化するため、シナリオに適した賛否両論を自分自身に問い合せる必要があります。あなたがフォローしているのに注意する子ドメインで一つのことを複数のアプリケーションを述べ考える

トークンベース認証では、あなたは、JWTを保存する場所の選択肢を与えています。一般的に、JWTはブラウザのローカルストレージに置かれています。これはほとんどのユースケースでうまくいきます。 ローカルストレージにJWTを保存する際には、いくつかの問題があります。ローカルストレージはクッキーとは異なり、特定のドメインにサンドボックス化されており、サブドメインを含む他のドメインからはそのデータにアクセスできません。

(強調はソース、私のものです:?トークンを保存するためにCookies vs Tokens: The Definitive Guideセクション)

開示:私はAuth0エンジニアです。)

+0

拡張答えをありがとう。つまり、SSOのような機能を持たせたいのであれば、異なるサブドメインに同じトークンを使用すると、 '.mydomain.com'ドメインを持つクッキーが唯一のオプションです(ブラウザベースのアプリケーションの場合)。 –

+0

私は、Webストレージが課したのとまったく同じドメイン要件が与えられれば、そのシナリオに実装するのが最も簡単だと言います。しかし、完全に無関係なドメインのアプリケーションでもSSOを実現することが可能であり、このシナリオもサポートされるでしょう。この例は[SSO](https://auth0.com/docs/sso)で確認できます。 –

+0

ありがとう、私はJWTの保管のためのクッキーに固執すると思います。ところで、あなたのコメントIDのリンクはひどくフォーマットされています。 –

関連する問題