web-dev-qa-db-ja.com

JWTトークンをCookieに保存する

これは私の設定です:

  • 認証に成功するとJWTトークンを提供する1つの認証サーバー。
  • 情報を提供する複数のAPIリソースサーバー(ユーザーが認証されたとき)。

ここで、ASP.NETMVCフロントエンドを構築したいと思います。認証後に受け取ったトークンをCookieに入れて、安全な通話を行うたびにアクセスできるようにしても大丈夫ですか? http呼び出しを行うためにRestSharp DLLを使用します。セキュリティ上の欠陥がある場合、トークンをどこに保存する必要がありますか?

私はクッキーにこのコードを使用します:

            System.Web.HttpContext.Current.Response.Cookies.Add(new System.Web.HttpCookie("Token")
        {
            Value = token.access_token,
            HttpOnly = true
        });
12
Kaizer

あなたは正しい道を進んでいます! Cookieには常にHttpOnlyフラグが必要です。このフラグを設定すると、JavaScript環境(Webブラウザー内)がCookieにアクセスできなくなります。これは、ブラウザでのXSS攻撃を防ぐための最良の方法です。

また、本番環境ではSecureフラグを使用して、CookieがHTTPS経由でのみ送信されるようにする必要があります。

また、 [〜#〜] csrf [〜#〜] 攻撃を防ぐ必要があります。これは通常、リクエストごとに提供する必要がある別のCookieに値を設定することによって行われます。

私は Stormpath で働いており、フロントエンドのセキュリティに関する多くの情報を書いています。これらの2つの投稿は、すべての側面を理解するのに役立つ場合があります。

シングルページアプリ(SPA)のトークンベースの認証

https://stormpath.com/blog/build-secure-user-interfaces-using-jwts/

13
robertjd

独自のJWTを生成していますか?

はいの場合は、「RS256」や「RS512」などの非対称暗号化に基づく署名アルゴリズムの使用を検討する必要があります。これにより、プライベートシークレットを共有せずにクライアントアプリケーションでクレームを検証できます。

本当にJWTをCookieに渡す必要がありますか?

JWTアクセストークンを参照するランダムなIDをCookieに配置し、Webアプリを提供するサーバーで参照解除の魔法を実行する方が安全な場合があります。

1
Tilo