2016-04-04 13 views
0

私のアプリケーションのクロスサイトスクリプティングを許可している問題があります。私はGET、POSTを実行しようとするときの要求が正常に動作GET:CORS:Rest API with ASP.NET 4.5.1 MVC

XMLHttpRequest cannot load http://localhost:49187/api/CampaignRegistration. The request was redirected to 'http://localhost:49187/Authentication/UnAuthorized?ReturnUrl=%2Fapi%2FCampaignRegistration', which is disallowed for cross-origin requests that require preflight. 

私のプリフライトリクエストが(認証ヘッダーなし)200 OKを返しますが、私の実際の要求は302(私の認証ヘッダーを含む)が見つかりませんでしたが返されます。

私のプリフライトリクエストは次のようになります。

Access-Control-Request-Headers:accept, content-type 
Access-Control-Request-Method:POST 

と応答は次のとおりです。

Access-Control-Allow-Headers:content-type 
Access-Control-Allow-Origin:* 

そして、私の要求ペイロードヘッダーは、次のとおりです。

{Cache-Control: "no-cache", Authorization: "Basic XXXXX"} 

私は私の中でCORSを有効にしていますこのようなWebApiConfig.cs(私は原点を変更します:*実際には動作します)。私はweb.configでCORSに関連するすべてを削除しました。

var cors = new EnableCorsAttribute("*", "*", "*"); 
config.EnableCors(cors); 

マイWEBAPIコントローラはすべて、このようになりますカスタム認証属性が含まBasicApiControllerを拡張:

protected override bool IsAuthorized(HttpActionContext actionContext) 
    { 
     try 
     { 
      if (HttpContext.Current.Request.Headers.AllKeys.Contains("Authorization")) 
      { 
       string authHeader = HttpContext.Current.Request.Headers["Authorization"]; 

       string cred = 
        Encoding.UTF8.GetString(Convert.FromBase64String(authHeader.Substring("Basic ".Length))); 
       string[] parts = cred.Split(':'); 
       string userName = parts[0]; 
       string password = parts[1]; 

       if (userName == _configRepository.WebApiUsername && password == _configRepository.WebApiPassword) 
       { 
        return true; 
       } 
      } 

      return false; 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 
    } 

私のフロントエンドはBACKBONE.JSを使用して作られましたが、私は本当に問題があるとは思いません先端側に設けられている。私は、私のようにCORSを有効にした後、何も集まっていないから、web.configを無用に変更しようとしました。アプリケーションでOPTIONS(プリフライトリクエストの外)を使用しないので、OPTIONSメソッドの認証をバイパスしようとしましたが、プリフライト要求が認証ヘッダーなしであっても何もしませんでした。誰かが何らかのアイデアを持っていれば、それは非常に高く評価されます

答えて

0

クライアント側で問題が発生しているようです。認可パラメータはヘッダ..../facepalmではなくペイロードにあります。