基本的には、一度認証されると、Oauth2プロセスを開始するログインフォームがあります。アクセストークンを取得する最後のリダイレクトを実行するまで、完璧に動作します。ログインフローは次のようになります。/user/login
へのPOSTは/user/oauth/auth
にリダイレクトされ、Oauth redirect_uri /user/oauth/redirect
にリダイレクトされます。 redirect_uriは決して起こらず、要求は決してサーバーにヒットしません。Safari Ajaxのリクエストはリダイレクトに従わない
私がAjaxリクエストを使ってそのリダイレクトをヒットした場合、corsはうまく動作し、期待される応答を得ることができます。
サーバーは、これらの応答
[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がのヒット取得することはありません示しています。クローム、IEでは、フローは、サーバを除いて同じであるFF私は要求を参照してくださいが、私はjQueryのを使用してい
のように死ぬのWebインスペクタで
[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
リクエストを見て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
});
JSONPは初期Pとしてオプションではありませんostはhttpsで送信され、POST要求でなければなりません。 IEを含む他のすべてのブラウザも正常に動作しています。成功応答が発生します。
SafariがStatuscode 0を発生させ、古典的なOriginポリシーエラーですが、リダイレクト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に、彼らは(それが原因の失敗だ理由として理にかなっているが送信されてはアクセス制御ヘッダーがありませんが、なぜ??)このようになり
「Appleが、これがHTML仕様の書き方であると主張している」 あなたのソースを挙げてください。 – hrdwdmrbl
申し訳ありませんが、この本当に遅く返信します。それは私がWebkitに取り組んで話していたエンジニアでした。しかし、それは本当にHTML5の仕様です。 要求元をnullに設定することは、http://www.w3.org/TR/cors/の一部です。 セクション7.1.7の手順6を参照してください。 –
私はJSONPはあなたのためのオプションではないが、これに遭遇する他のユーザーのために...私はそれがSafariでドメイン間で複数のリダイレクトを使用できることを確認できます。 – james