注:この質問は重複しているように聞こえるかもしれませんが、他の同様の質問はすべて考慮されていません(モバイルアプリ、IoT、Web、サードパーティの使用)。具体的には、Cookieと共にクライアントを処理する場合。
私はREST API(laravelベース)を構築しています。これは、Web、モバイルアプリ、IoTアプリケーションなどの複数のクライアントによって使用されます。個人的には、従来のMPA Webアプリケーション。そのため、私はすでに主要なセキュリティ上の懸念を認識しており、これまで許容できる範囲でそれらを扱ってきました。
ただし、今回はSPA Webアプリケーションを作成する必要があります。私が間違っている場合は修正してください。ただし、このような状況では、サーバーからフロントエンドを分離することをお勧めします。APIを利用するクライアントはWeb SPAだけではないためです。それ自体、そもそもRESTful APIの要点です。
私は過去2週間、認証/承認の適切な方法を広範に調査してきましたREST APIアプリケーション。調査を重ねるほど、ジレンマ(以下で説明します)が複雑になります。
次の条件/要件があるとします。
基本的に、私が理解するようになったのは、基本的に「アクセス/ベアラートークン」を永続化するための2つのオプション、または従来から知られているセッションに要約できるということです。
1)弾丸をかじり、古き良きhttpOnly、HTTPSの安全な方法で行くcookie方法
長所:
短所:
2)現代[〜#〜] jwt [〜#〜]方法
長所:
短所:
一方では、Microsoftの従業員がSPAを使用してCookieを完全に削除することを提案しています。つまり、[〜#〜] xsrf [〜#〜]を忘れて[〜#〜]を処理しますxss [〜#〜]。これはREST APIの目的の一種であり、[〜#〜] xss [〜#〜]は部屋の象であるので、対処する必要がありますまた、サードパーティのアプリケーションがCORSを使用して簡単にAPIを利用できるようにする方法についても触れています。
一方、他のエキスパート(Auth0など)が[〜#〜] xss [〜#〜]を避け、扱いやすい[ 〜#〜] xsrf [〜#〜]。
個人的に、私は[〜#〜] jwt [〜#〜]を使用し、[〜#〜] xss [〜#〜]を扱うことに傾いています。 RESTfulを維持しているためか、他のクライアントでCookieを処理したくないだけかもしれません(サーバーがどのように処理するかについても[〜#〜] xsrf [〜#〜]モバイルでapp/iot's)。
私の推論は、localStorageに[〜#〜] jwt [〜#〜]を格納するだけで、最高のものを期待しています。 [〜#〜] xss [〜#〜]保護対策を実装することを忘れないでください。私の結論は正しい方向に進んでいますか?私が見逃しているものはありますか?私が間違ったことはありますか?
両方を使う。
モバイルアプリでは、実行するコードをより適切に制御でき、XSSの脆弱性を回避できます。そのため、トークンの保存はそれほど問題ではなく、コードでAPIに渡すことができます
あなたのウェブページでは、注入されたコードについてもっと心配する必要があるので、安全なクッキーを使ってトークンを保存し、ブラウザにそれを自動的に渡させます
結局のところ、APIはリクエストからトークンを読み取るだけです。ヘッダーとCookieを問題なく確認でき、複数のドメインの背後でホストできます