web-dev-qa-db-ja.com

CDNからのOAuth 2 Authorizationコールバックを処理することは安全ですか?

この質問は、 OAuth 2.0承認フレームワーク のコンテキストで行われます。

ファーストパーティのAPIによってサポートされているが、SSOはサードパーティの承認サーバーに依存しているWebアプリケーションについて考えてみます。

アプリケーションのインデックスページがAmazon CloudFrontなどの一部のCDNでホストされているとします。このページは、クエリ文字列に認証コードがあるかどうかを確認するJavaScriptを呼び出します。

クエリ文字列に認証コードがない場合、ページはユーザーをサードパーティのログインページにリダイレクトするJavaScriptを呼び出します。ユーザーがログインしてアプリを承認すると、サードパーティのサーバーは、ユーザーをCDNでホストされている同じインデックスページにリダイレクトし、クエリ文字列に承認コードを含めます。

クエリ文字列に認証コードがある場合、ページは、認証コードを含むファーストパーティAPIにリクエストを行うJavaScriptを呼び出します。

ファーストパーティAPIは、指定された認証コードと事前定義されたクライアントシークレットを使用して、サードパーティの認証サーバーからアクセストークンを取得しようとします。成功した場合、サードパーティのリソースサーバー上のユーザーリソースを取得しようとします。次に、そのユーザーのセッションCookieを使用して、CDNのインデックスページからの要求に応答します。

現在、私の経験では、リダイレクトURIはファーストパーティAPIのリソースであり、ユーザーを再度リダイレクトして、CDNのインデックスページに戻します。ただし、この質問では、ファーストパーティAPIはインデックスページにAJAXを介して認証コードを渡したいと考えています。

これは安全なワークフローですか?そうでない場合、リダイレクトURIにCDNリソースを使用した結果はどうなりますか?

2
Ed I

まず、サードパーティの承認サーバーを作成したとき、ファーストパーティAPIだけが知っているクライアントシークレットが必要です。そのため、バックエンドだけが実際に承認コードをアクセストークンと交換できます。ここでは何も問題はありません。

次に、リダイレクトエンドポイントにHTTPSを使用する必要があるため、CDNがHTTPSをサポートしていることを確認してください。そうでない場合、誰かが交換を盗聴し、最初にアクセスコードを送信して、ユーザーセッションを乗っ取ることができます。

3番目-SSOが必要な場合は OpenID Connect プロバイダーまたは類似のものを使用していることを確認します。プレーンOAuthは 認証用に設計されていますOAuth認可vs認証 )ではありません

最後-OAuthとは関係ありません-CDNにインデックスページを配置すると、アプリケーションのセキュリティにどのように影響するかを評価する必要があります。これにより、DOS保護が向上しますが、直接制御できない要素が導入されます。

1
AGrzes