私の場合は、ウェブアプリとモバイルアプリのセキュリティを適切に実装する方法を理解してください。同じサービスのウェブアプリとモバイルアプリの認証(一般的なセキュリティ)
- バックエンド:私が持っているもの
。 JSONテキストを消費して生成するStateless REST APIのようなものです。どんな種類の状態も格納しません。
- Webアプリケーション。サービス機能への主要なポータル。
- モバイルアプリケーション。
バックエンドには状態を保存しません。代わりに、私はモバイルとWebブラウザの両方のアプリケーションにこれを委譲します。 ここにセキュリティの問題があります。どうすればそれを適切に保護できますか?
セッションのメカニズムが本当にうまくいかないので、私はJWTに行くことにしました。 私のJWTでは、ユーザーIDと、ユーザーの特権などのその他の情報を保存するつもりです。
モバイルアプリの場合、このトークンをレスポンスの一部として送信し、アプリはそのセキュアストア内にアプリを保存します。 各要求は、このトークンをAuthorization Headerとして送信します。ウェブアプリについては
、私はHttpOnlyのクッキーを経由して、このトークンを送信するつもりです。したがって、このトークンは、クライアントからのすべての要求に含まれます。 問題は、CSRF攻撃の可能性があります。それに対処するために私は次のことを考えました。各ユーザーの「セッション」はCSRFトークンに関連付けられます。 私はこのトークンをサーバーに保存できません(ステートレスAPIを覚えておいてください)、HttpOnly Cookieを介して暗号化された(再びJWTで)トークンをクライアントに送信し、通常のCookieでは非暗号化します。
これで、Webクライアントはすべてのクッキーから非暗号化トークンを使用して、それをサーバーに戻します。サーバーは、このトークンがHttpOnly Cookieに格納されている暗号化されたものと一致するかどうかをチェックします。
また、私は、WebアプリケーションとモバイルWebアプリケーションに異なるURLエンドポイントを使用します。何のために?上記の認証メカニズムを別々に保つために、これはサービスを安全に保つのに役立ちます。
あなたはそれが解決策だと思いますか?ここに何の問題がありますか?
ありがとうございます。
ありがとう、それは私が意味したものです。暗号化されておらず、HttpOnlyではない他のクッキーは、クライアントが値を取得してフォームパラメータとして送信するために必要です(例えば、提案した別のヘッダ)。 次に、サーバーは暗号化されたCookieと受信したフォームパラメータまたはカスタムヘッダーの値を比較します。 – yateam
それは良い音だ。 :) –