1

私のサービスの一部のユーザーは、ブラウザーで JavaScript を介して REST API (ユーザー資格情報が必要) にアクセスできるようにしたいと考えています。同一生成元ポリシーへの違反に関連するすべての脆弱性のため、一般的にこれは許可しません。しかし、特定のユーザーがそれを必要とし、何が起こっているのかを理解している場合...「クロスオリジンリクエストを作成できる」ホワイトリストに彼を追加したいと思います。

ただし、http 認証情報に基づいて Access-Control-Allow-Origin ヘッダーを選択的に返す方法がわかりません。

これをJavaScriptで行う場合:

$.ajax({'url':'url', 'beforeSend': function (xhr) { xhr.setRequestHeader("Authorization", "Basic " + 'base64encodedcreds' ) } })

ブラウザはまず、Authorization ヘッダーなしで ORIGIN METHOD リクエストを送信します。したがって、応答に Access-Control-Allow-Origin を含める必要があるかどうかを知る方法はありません。

xmlhttprequest に ORIGIN を認証とともに送信するための設定はありますか? または、クロスオリジン アクセスを選択的に許可する別の方法はありますか?

4

2 に答える 2

1

これは不可能であるというduskwuffの回答に基づいて、新しいURLを作成する必要がないように、この近いルートを取りました。

  • access-control-allow-origin を使用したオプション クエリを常に受け​​入れる
  • GET/POST が着信した場合は、オプション ヘッダーを確認します。ユーザーの資格情報を確認し、ユーザーがホワイトリストに登録されていない場合は 401 を確認します。

(django ミドルウェアを使用すると非常に簡単に実行できます)

于 2013-03-05T01:20:10.367 に答える
1

この動作を回避する方法はありません。認証ヘッダーを渡すことは、AAAO が制限しようとしている動作の 1 つです。しかし、あなたはそれを回避することができます:

  • このユーザー用に別のエンドポイント URL を作成します。
  • このエンドポイントが常にAccess-Control-Allow-Originアクセスを許可する を返すようにします。(または何でも。)
  • このエンドポイントは、許可しようとしているユーザー以外のユーザーに対しても常に 401 (承認されていません) を返すようにします。
于 2013-03-02T06:44:33.953 に答える