私はAngularでWebアプリケーションを作成していますが、認証はJWTトークンによって処理されます。つまり、すべてのリクエストには、必要なすべての情報を含む「Authentication」ヘッダーがあります。
これはREST呼び出しではうまく機能しますが、バックエンドでホストされているファイル(Webサービスがホストされているのと同じサーバー上にあるファイル)のダウンロードリンクをどのように処理すればよいかわかりません。
<a href='...'/>
ヘッダーが含まれておらず、認証が失敗するため、通常のリンクを使用できません。のさまざまな呪文についても同じですwindow.open(...)
。
私が考えたいくつかの解決策:
- サーバー上に一時的な安全でないダウンロードリンクを生成する
- 認証情報をurlパラメータとして渡し、ケースを手動で処理します
- XHRを介してデータを取得し、ファイルクライアント側に保存します。
上記のすべてが満足できるものではありません。
1は現在使用しているソリューションです。2つの理由で私はそれが好きではありません。1つ目はセキュリティ面で理想的ではない、2つ目は機能しますが、特にサーバーでかなりの作業が必要です。何かをダウンロードするには、新しい「ランダム」を生成するサービスを呼び出す必要があります"url、それをしばらくの間(おそらくDBに)保存し、クライアントに返します。クライアントはURLを取得し、window.openなどを使用します。リクエストされた場合、新しいURLはそれがまだ有効かどうかを確認してから、データを返す必要があります。
2は、少なくとも同じくらいの作業です。
3は、利用可能なライブラリを使用していても、多くの作業と多くの潜在的な問題のようです。(自分のダウンロードステータスバーを用意し、ファイル全体をメモリに読み込んでから、ユーザーにファイルをローカルに保存するよう依頼する必要があります)。
タスクはかなり基本的なもののように思えるので、もっと簡単に使えるものが他にあるかどうか疑問に思っています。
私は必ずしも「Angular way」の解決策を探しているわけではありません。通常のJavascriptで問題ありません。