web-dev-qa-db-ja.com

Web APIデータ要求中にIDプロバイダーへのリダイレクトをどのように処理する必要がありますか

シナリオ

純粋にhtml、css、およびjavascriptで構成される単一ページのWebアプリがあります。初期読み込み後、使用中に、ajax呼び出しを介して1つ以上のRESTful APIからのデータでさまざまなビューを更新します。 API呼び出しは、json形式でデータを返します。各Web APIは、独立したドメインでホストされている場合があります。

質問

Ajaxコールアウト中に、私の認証トークンがWeb APIによって有効と見なされない場合、Web APIは私(302)をその特定のAPIのIDプロバイダーにリダイレクトします。これはデータ用のajaxコールアウトであり、必ずしも表示用ではないため、IDプロバイダーの認証ページを表示する方法を見つける必要があります。私はそのリダイレクトをトラップし、IDプロバイダーのログインページを表示する別のビューを開く必要があるようです。 oauth一連のリダイレクトが完了したら、トークンを取得し、トークンを添付してajaxデータ呼び出しを再トリガーする必要があります。

これは有効な方法ですか?リダイレクトのajax処理を示す例はありますか?

6
Erds

リダイレクトは、呼び出し側のJavaScriptに対して透過的に行われます。 JavaScriptからのリダイレクトを検出することは(普遍的に)不可能です。ただし、できることは2つあります。

  1. 返されたデータがJSONではなくHTMLであることを検出し、ポップアップまたはiframeを使用してURLを再度開き、認証を処理します。
  2. 無効なリクエストに対して401 Unauthorizedヘッダーを返すようにWeb APIを変更します。その応答の本文には、JavaScriptがポップアップまたはiframe(1など)を使用して処理できる認証用の指定URLを含めることができます。
4
bouke