2017-01-05 12 views
1

さまざまな理由から、私はAngular JSアプリケーションをレンダリングするためにサーバーテクノロジ、この場合はASP.Netを使用する必要があります。したがって、ユーザーが索引ページを要求すると、要求はASP.Netパイプラインを通過し、アプリケーションのスクリプトやビューなどを提供します。レスポンスヘッダーのAngular JSアプリにベアラトークンを渡すことはできますか?

さまざまなWeb APIサービスを呼び出すことができるように、アプリケーションにベアラトークンを取得する必要があります。

レスポンスヘッダーのベアラトークンをユーザーのブラウザに渡すことはセキュリティの観点から許容されますか?その後、Angular JSアプリケーションが起動すると、ヘッダーから値を読み取り、それを後続のAPI要求のためにローカルストレージに格納します。彼は/彼女が認証されていないところ

ユーザフロー...

  1. ユーザーはmembers.domain.comに行きます。
  2. OAuthプロバイダにリダイレクトされたユーザー。
  3. ユーザーはプロバイダで認証されます。
  4. その後、ユーザーはmembers.domain.comにリダイレクトされます。ユーザーは認証され、クッキーがあります。
  5. 最初のアプリケーションページは、MVCパイプラインを通じてレンダリングされます。クレームは調査され、UIはユーザーのクレーム(例:ロール= "募集者"など)ごとにメニューオプションなどで表示されます。

これは、ユーザーのブラウザに表示される初期アプリケーションを取得し、メニューオプションはユーザーの主張に基づいて作成されます。

欠けている部分は、ブラウザにさまざまなAPIを呼び出すために使用できるベアラトークンを取得することです。

答えて

1

更新日:更新された質問に基づいて回答が完全に変更されています。

あなたがしようとしていることは、実際にはうまく聞こえます。クライアント側のベアラトークンとしてJWTを検査するように思えます。

これを行うには、次の2つのいずれかを実行する必要があります:あなたはクッキーを使用することによって、より「安全な」アプリケーションを維持したい場合は、上のルートを作成することができ、

  1. をごバックエンド(/meまたは同様のもの)。リクエストされたときに、現在ログインしているユーザーの個人データ(クレーム、UIのレンダリングに必要なもの)がすべて返されます。 Angularアプリケーションが起動すると、このページにリクエストを行い、すでに設定されているCookieによって認証され、レンダリングを行うためにフロントエンドに必要なデータを返します。

  2. 純粋なJSのすべてをXSS攻撃の影響を受けやすい状態で実行したい場合は、ユーザーのベアラートークンをクッキーに保存する代わりに、HTML5ローカルストレージに保存することができます。こうすることで、AngularアプリはブラウザでJavascriptを使用してトークンに直接アクセスしてページをレンダリングできます。これにより、パフォーマンスが向上する可能性がありますが、ドメイン上で悪意のあるJSを実行できるユーザーは、ユーザーのベアラトークン(LocalStorageから)を読み取って問題を引き起こす可能性があります。

最後に:あなたはのlocalStorageルートを行く、そしてあなたがあなたのバックエンドにあなたの角度APIリクエストを認証するために何ができるかよりも、のlocalStorageでベアラトークンを保存する場合です:

  1. グラブベアラートークンLocalStorageの外に出ます。
  2. バックエンドにAPIリクエストを行い、ベアラトークンをHTTP Authorizationヘッダーに入れます。
  3. バックエンドで、HTTP Authorizationヘッダーを解析し、トークンを取得します。
  4. JWTが有効かどうかを確認するトークンを有効にする/など
  5. それです!

APIリクエストの認証に使用される標準のHTTPヘッダーはHTTP認証であるため、(LocalStorageを使用して)記述しているフローを実行したい場合は、トークンをHTTP認証に入れてください。行く。ほとんどのWebフレームワークはこのヘッダーの解析を自動的に処理し、送信するトークンのような証明書を探します。あなたはこのコードを使用することができます

+0

感謝。 CookieをHTTPSに設定すると、Angular Appからアクセスできますか?私が使用しているアイデンティティ・フレームワーク(私が現在理解しているように)は、ベアラ・トークンがヘッダーに渡されてAPIサービスにアクセスすることを期待しています。 – Remotec

+0

ああ、特定の認証フレームワークを使用していて、HTTP認証ヘッダーにトークンを必要としているのであれば、あなたが提案していることをする以外に選択肢はありません。多くの認証フレームワークでは、認証方法を選択することができます.HTTP AuthorizationヘッダーかCookieのどちらかで、Cookieはセキュリティで保護されたサイトIMOのはるかに優れたオプションです。また、httpsのみのCookieを使用することで、暗号化されたSSL接続を介してのみCookieを設定できることを意味します。角度アプリは通常のように自動的にCookieを送信します。 – rdegges

+0

サービスを呼び出すフローは、REQUESTベースのベアラトークンを使用します。私の質問は、そのトークンを最初にAngularアプリに入れる方法です。私はこのために暗黙のフローを使用することができますが、私はどこに私のアプリが必要な要件があります。 ASP.Netを通じてレンダリングされるので、サーバー側の技術がトークンをブラウザに取り込む方法が必要です。したがって、アプリケーションを送信する最初のRESPONSEからのヘッダーを考慮してください。ブラウザに送信します。 – Remotec

関連する問題