1

まず第一に、私はすべての同様の投稿を経験しましたが、私の問題を解決するものは何もありません. また、少なくとも Fiddler と Chrome 開発ツールに示されているように、適切な応答ヘッダーを受け取っているため、サーバー側に問題がないことも除外しました。

私はThinktecture.IdentityModelを使用しており、次のように jquery を使用してクライアント側で認証を行いました。

    $.ajax({
        url: tokenEndpoint,
        type: 'GET',
        // jsonp is not an option and it does not work anyway with my server setup
        dataType: "json", // including this does not help
        crossDomain: true, // including this does not help
        beforeSend: function (xhr) {
            xhr.setRequestHeader('Authorization', 'Basic xxxxx');
        },
        success: function () {
            alert('success!');
        },
        error: function(xhr, errorType, exception) {
        }
    });

これが私が得たトレースです:

* プリフライト CORS リクエスト *

OPTIONS http://HOST_DOMAIN/tokenEndPoint HTTP/1.1
Host: HOST_DOMAIN
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://ORIGIN_DOMAIN
Access-Control-Request-Headers: accept, authorization
Accept: */*
Referer: http://ORIGIN_DOMAIN/login
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

プリフライト応答

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
Access-Control-Allow-Origin: http://ORIGIN_DOMAIN
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: accept,authorization
Content-Length: 15

{"status":"ok"}

実際の AJAX リクエスト

GET http://HOST_DOMAIN/tokenEndPoint HTTP/1.1
Host: HOST_DOMAIN
Connection: keep-alive
Accept: */*
Origin: http://ORIGIN_DOMAIN
Authorization: Basic xxxxx
Referer: http://ORIGIN_DOMAIN/login
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

AJAX レスポンス

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 560
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
Set-Cookie: xxxxx


{
  "access_token": "xxxxx",
  "expires_in": xxx
}

サーバー呼び出しが成功したことを示す [Fiddler] タブの TextView からのトレースの最後の行に注意してください。サーバー側のコードをデバッグし、その出力を返すコードに到達し、エラーをスローしなかったため、サーバー呼び出しが成功したことを確認できます。それを機能させる方法はありますか?

4

1 に答える 1

1

質問のタイトルのエラー メッセージにあるように、応答には Access-Control-Allow-Origin ヘッダーがありません。質問の最後に投稿した応答内容によると、サーバーにはこのヘッダーが含まれていません。したがって、問題はサーバーにあります。このヘッダーを応答に含める必要があります。

于 2014-01-20T10:35:21.147 に答える