6

基本的に、認証されるとOauth2プロセスを開始するログインフォームがあります。アクセストークンを取得する最終的なリダイレクトを行う必要があるまで、これは問題なく機能します。ログイン フローは次/user/login/user/oauth/authとおり/user/oauth/redirectです。redirect_uri は発生せず、リクエストはサーバーにヒットしません。

Ajax リクエストを使用してそのリダイレクトにヒットすると、cors は正常に動作し、2 回リダイレクトした場合にのみ期待される応答が得られます。

サーバーはこれらの応答を表示します

[I 130226 10:16:38 web:1462] 302 POST /user/login (192.168.1.5) 156.01ms  (Session cookies set fine)
[I 130226 10:16:38 web:1462] 200 OPTIONS /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 1.86ms
302 GET /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 8.58ms

最後の URL はヒットしません。Chrome、IE、FF では、サーバーがリクエストを確認することを除いて、フローは同じです。

[I 130226 10:16:38 web:1462] 302 POST /user/login (192.168.1.5) 156.01ms  
[I 130226 10:16:38 web:1462] 200 OPTIONS /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 1.86ms
302 GET /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 8.58ms
[I 130226 10:27:12 web:1462] 200 GET /user/oauth/redirect/code?code=57497058fbbf6003310ea22d3902ac67 (192.168.1.5) 0.54ms

Web Inspector でリクエストが表示されますが、

ここに画像の説明を入力

私はJquery 1.9を使用しており、ここにajaxリクエストがあります(ここで太陽の下ですべてのオプションを試して動作させることができます.)

$.ajax({
    type: "POST",
    url: reqUrl,
    data: data,
    dataType: "json",
    success: function(data, textStatus) {
            console.log(data);
            alert('logged in');

    },
    error: function(e){
        console.log(e);
    },
    complete: function(request, status) {
        console.log("headers=" + request.getAllResponseHeaders());
    },
    statusCode: {
    200: function(data) {
        console.log('yup we got it.')
    }
  },
  xhrFields: {
    withCredentials: true
  },
  crossDomain: true,
  async:true
});

最初の投稿は https 経由で送信され、POST 要求でなければならないため、JSONP はオプションではありません。ここでも、IE を含む他のすべてのブラウザーは正常に動作しており、成功の応答が発生します。

Safari は、従来の Origin ポリシー エラーである Statuscode 0 とエラーを発生させますが、そのリダイレクト URI は、ログインをバイパスする標準の ajax 要求で機能します。アクセス制御の問題だとは思えません。なぜなら、Safari が起動するだけで呼び出しが機能するからです。

リダイレクトのリクエストヘッダーと関係があり、Safariがリクエストを停止していると確信しています。最初に成功した 302 では、次のようになります。

Access-Control-Request-Method: GET
Origin: http://192.168.1.5:9090
Access-Control-Request-Headers: origin, accept-encoding, accept-language

しかし、リダイレクト URI では次のように表示されます (アクセス制御ヘッダーが送信されないため、失敗する理由は理にかなっていますが、なぜですか??)

Origin: http://192.168.1.5:9090
Accept-Encoding: gzip, deflate
Accept-Language: en-us
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17
Accept: */*
Referer: http://192.168.1.5:9090/login
4

1 に答える 1

5

これは Safari のもののようです。最初のリダイレクトのみに従います。Apple は、これが HTML 仕様の記述方法であると主張しています。だから....リダイレクトしないようにフローを作り直して、/user/loginすぐにoauthプロセスを開始する必要がありました。

于 2013-03-02T16:49:11.750 に答える