web-dev-qa-db-ja.com

OAuth / OpenIDConnect Authenticationのあらゆる局面でCORSが必要になることはありますか?

私はOpenIDConnect認証を調べており、「単純なCORS」または「複雑なCORS」のいずれかが認証または承認中に活用されるかどうかを判断しようとしています。

背景

単純なCORS(プリフライトなし)には、以下が含まれます。

HTTPメソッド:

  • GET
  • POST
  • HEAD

そして、コンテンツタイプ

  • multipart/form-data
  • application/x-www-form-urlencoded
  • テキスト/プレーン

サーバーが提供されますAccess-Control-Allow-Originレスポンス内

他のXヘッダーまたはメソッドは、preflight OPTIONSリクエストになります。

質問

  • OAuthフライト前リクエストを使用する方法でCORSを活用していますか?(OpenID Connectに関する情報が望ましいですが、OAuthの実装は興味深いです)

  • OAuthの形式は、飛行前のリクエストがないCORSを利用しますか?

  • OAuth IDプロバイダー、または証明書利用者/リソースにセキュリティ上の脆弱性を引き起こすCORSの構成はどれですか?

9

OpenIDについてはわかりませんが、OAuthの場合、実際の認証部分にはCORSは含まれませんが、接続しているクライアントの種類によってはリソースサーバーで必要になる場合があります。

OAuth 2フレームワークを定義する RFC 6749 では、アプリケーションが認証を取得するために定義された4つの異なるメソッドがあります(ここで、クライアントはアクセスしたいサーバーを意味します)データ、リソースの所有者、エンドユーザーは、データの所有者、データへのアクセスを許可する人、ホスト​​は、承認とAPIエンドポイントを提供するエンティティを意味します。

  • クライアントがサーバーを実行しているときに使用される認証コード。これが最も一般的な方法です。
  • 暗黙的。アプリケーションがユーザーのブラウザー内で実行されているときに使用されます。
  • リソース所有者のパスワード資格情報。これは、エンドユーザーのユーザー名とパスワードを使用して、サーバーで直接認証されます。これには認証フローはありません。ユーザーはアプリケーションにパスワードを与えるだけです。
  • クライアント資格情報。これは、クライアントがリソースに自動的にアクセスできる場所です。これは自動であるため、認証フローはありません。

認証コードメソッドを使用する場合、認証フローの高レベルの概要は、クライアントがホスト上の認証ページにユーザーをリダイレクトすることです。エンドユーザーがアクセスを許可すると、クライアントのサイトにリダイレクトされます。リクエストを受信すると、クライアントのサーバーはホストにリクエストを出し、一時トークンを永久トークンに交換します。これを使用して、サーバーからAPIリクエストを行います。

この方法では、すべての要求がクライアントのサーバーからホストサーバーに対して行われるため、CORSは必要ありません。エンドユーザーのブラウザーで行われる唯一の要求はリダイレクトであり、CORSの影響を受けません。

implicitメソッドを使用する場合、アクセスを許可した後にエンドユーザーがリダイレクトされると、永続的なコードは、エンドユーザーのブラウザーで実行されている(JavaScript)スクリプトによってURLから取得されます。クライアントのウェブサイト。このコードは、ブラウザで実行されているJavaScriptスクリプトによってAPIにアクセスするために使用されます。

CORSは、このメソッドで実際のAPIエンドポイントに使用する必要があります(要求がいずれにしてもCORSを必要とする場合-OAuthを使用して認証されることについて特別なことは何もないため、GET要求にはCORSは必要ありませんが、DELETE要求には必要です)。ユーザーのブラウザからアクセスします。ただし、認証フローはCORSを必要としません。これも、クロスオリジンリクエストではなくリダイレ​​クトを使用して処理されるためです。

6
JackW