0

シークレット トークンを含む認証ヘッダーを使用して、Web サービスに対する認証を行うのが一般的です。そして、このメカニズムのセキュリティは秘密のトークンに依存するため、このトークンが漏洩しないように注意する必要があります。

このような認証ヘッダーを angular を使用して設定する方法を説明するチュートリアルがウェブ上に無数にあります。

CORS のおかげでクロスドメインと通信できるパブリック API とプライベート API がいくつかあります。そして明らかに、これらのリクエストで内部認証トークンを送信したくありません。

リクエストごとにのみトークンを手動で設定するなど、他のいくつかの手法が思い浮かびますが、それは多くの重複コードを意味します。$http サーバーを $authenticatedHttp サービスにラップして、認証済みサービスであるか通常のサービスであるかにかかわらず、使用されるオブジェクトから常に見えるようにすることができます。ただし、$http サービスには、ラップするメソッドが非常に多くあります。

より良い解決策はありますか?

アップデート

回答を見ると、私の質問が理解されていなかったという印象があります。より具体的な例で試してみます。

私はプライベートなウェブページを持っています。人々はユーザー名/パスワードでログインする必要があります。簡単にするために、HTTP 基本認証を使用するとします。そのため、ユーザー名/パスワードは bas64 でエンコードされ、HTTP ヘッダー "Authorization" のすべての要求で送信されます。これまでのところ問題はありません。

しかし、この素晴らしい無料の天気ウィジェットがあります。https://myWhateverWeatherService.tld/weather.jsonから現在の天気情報を JSON 形式で取得できます。プライベート Web サービスにログインした後、天気情報も取得します (CORS を使用すると、これを実行できます)。

問題は、myWhateverWeatherService.tld が認証をまったく必要としないにもかかわらず、Angular の $http サービスが Authorization ヘッダーを追加することです。それに、myWhateverWeatherService.tld の人たちも信用できません。たぶん、彼らはサービスをセットアップしただけなので、認証トークンを盗んで、それらを使って多くの厄介なことを行うことができます.

それに対処するための信頼できる方法が必要です。インターセプターで正規表現を使用してURLをチェックすることはすでに考えていました。これは可能ですが、正規表現が見逃す特定のケースを忘れることも難しくありません。

4

1 に答える 1

0

トークンは常にネットワーク経由で送信されますが、これが最も脆弱な部分だと思います。

トークンは常に http ヘッダー自体に存在する必要があるため、リクエストをより安全にする唯一の方法は、リクエスト全体を暗号化することです。そのためには SSL を使用する必要があります。

トークンをクライアント マシンに保存することの安全性が心配な場合は、トークンをローカル ストレージなどに保持せずに、ブラウザのメモリにのみ保持することができます。そのため、ユーザーがブラウザを閉じて再度開くたびに、ログインする必要があります。

于 2014-09-03T20:56:25.713 に答える