5

フロントエンド(AngularJsとAsp.Net MVCを使用して作成)用に2つのアプリケーションを作成し、バックエンド用にWeb APIアプリケーションを使用しました。OWIN:Azureの401 unauthoriedエラーを返すwebapiコール

フロントエンドでフォーム認証でアプリケーションを保護しようとしていて、バックエンドで基本フォーム認証を実装しました。

IISでローカルでテストしたところ、正常に動作しました。しかし、私のアプリケーションをAzureでホストしたとき、認証属性を持つAPIコールは401の不正なエラーを返します。

応答ヘッダー:

Access-Control-Allow-Origin:* 
    Cache-Control:no-cache 
    Content-Length:0 
    Date:Wed, 05 Oct 2016 11:08:30 GMT 
    Expires:-1 
    Pragma:no-cache 
    Server:Microsoft-IIS/8.0 
    Set-Cookie:ARRAffinity=925cd503f9e5771e9ad651c59baa4a1f678d93cac8b9da4dc9bcb64892ac8710;Path=/;Domain=FrontEnd.azurewebsites.net 
    WWW-Authenticate:Basic realm="Backend.azurewebsites.net" 
    X-AspNet-Version:4.0.30319 
    X-Powered-By:ASP.NET 

要求ヘッダー。リクエストヘッダ

Authorization: Basic dmlzaG53guFua2FyLnNha3Roadh4bEBnbWFpbC5jb206MTIzMTIz 
    Cookie: __RequestVerificationToken_L3Nfg4dwc3Bh0=YGwlXkckjhg6xTESkI-lN9sNtDVsfefshsrvGWPKekmv_GLZ0Rq8eA5P8Z7sdf4trwbPX4WymcGJJrLamQLMe2Vf2D2fVUg4qJptOvcsCWg1; ASP.NET_SessionId=gk4s1rlsfg5gfeafo3455dkr; .ASPXAUTH=C8113FD23FC4902dsfrsdf5FB3399BA121703F41F9A57AEA50667F2AD4FC02F3D3955215A91F6A3A2EA4287202522380435A93D8BE78D45E6D24FB7E05F64653AE06E0026DEB2911343591563F70EE8EE76338F07CBABE6EA4B95359F3C31sdf9C999sdf2864849gfdB916A06gfds29E3C8D01D2371807E98335000D4D14B391CCE3zxcd49DB77696F4BB77E4434 

と共に

Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate, sdch, br 
Accept-Language:en-US,en;q=0.8 
Cache-Control:no-cache 
Connection:keep-alive 
Host:backend.azurewebsites.net 
Origin:http://FrontEnd.azurewebsites.net 
Pragma:no-cache 
Referer:http://FrontEnd.azurewebsites.net/ 
Token:null 
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 

しかし、ローカルでは

認可およびクッキーパラメータがフォーム認証とアズールフロントエンドアプリケーションからの要求に追加されますされていない渡されます。

私のバックエンドのアプリケーションのazureは、オフに設定されています。どのボディでも問題が何か、または私がazureポータルで設定する必要があることを知ることができます。

+0

ローカルで両方のアプリケーションがおそらくlocalhostを使用しているので、クッキーを共有しますが、一度デプロイすると別のアプリになるので、認証クッキーを共有しないでください。 –

+0

@NeilThompsonリクエストにクッキーを追加する方法はありますか? – Skull

+0

これは解決ですか? –

答えて

2

この問題は、あなたのリクエストに追加することによってこの問題を解決することができます CORSに起因して、ウェブAPIの

$http({ 
    .... 
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, 
    withCredentials: true, 
    }) 

web.configファイル

<system.webServer> 
     <validation validateIntegratedModeConfiguration="false" /> 
      <handlers> 
       <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
       <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
       <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
       <remove name="OPTIONSVerbHandler" /> 
       <remove name="TRACEVerbHandler" /> 

       <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
       <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
       <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
      </handlers> 


      <httpProtocol> 
       <customHeaders> 
        <add name="Access-Control-Allow-Origin" value="**FrontEnd URL**" /> 
        <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, Cache-Control" /> 
        <add name="Access-Control-Allow-Credentials" value="true" /> 
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> 
       </customHeaders> 
      </httpProtocol> 
     </system.webServer> 

あなたも、同様にこのURLを参照してください。 : https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

2

これは、もはやホーあなたのAzureの設定に応じて、同じマシン上に置かれます。私はmachineKey自分でも同様の問題を抱えています。

は、アプリケーション間の設定を一致させるために、次のURLで指示に従ってください、あなたは問題ないはずです。

https://msdn.microsoft.com/en-us/library/eb0zx8fc.aspx

EDITを:レスポンスヘッダ内Access-Control-Allow-Origin:*で、それはおそらく通常のCORSの問題ではありませんmachineKeyとCORSの問題がよく遭遇します。 machineKey修正が機能しない場合は、CORSのフライト前チェックの処理方法を確認してください。 my answer hereを参照してください。

関連する問題