C OWIN:webapi调用在Azure中返回401个未经授权的错误
我创建了两个应用程序,一个用于前端(使用AngularJs和Asp.NETMVC创建),另一个用于后端,我使用WebAPI应用程序 我尝试在前端使用表单身份验证来保护我的应用程序,并在后端实现基本表单身份验证 当我在IIS中进行本地测试时,它工作正常。但当我在Azure中托管我的应用程序时,带有身份验证属性的API调用返回错误 响应标题:C OWIN:webapi调用在Azure中返回401个未经授权的错误,c,azure,asp.net-web-api,forms-authentication,basic-authentication,C,Azure,Asp.net Web Api,Forms Authentication,Basic Authentication,我创建了两个应用程序,一个用于前端(使用AngularJs和Asp.NETMVC创建),另一个用于后端,我使用WebAPI应用程序 我尝试在前端使用表单身份验证来保护我的应用程序,并在后端实现基本表单身份验证 当我在IIS中进行本地测试时,它工作正常。但当我在Azure中托管我的应用程序时,带有身份验证属性的API调用返回错误 响应标题: Access-Control-Allow-Origin:* Cache-Control:no-cache Content-Length:0
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
请求头
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
但是在本地和请求头中
Authorization: Basic dmlzaG53guFua2FyLnNha3Roadh4bEBnbWFpbC5jb206MTIzMTIz
Cookie: __RequestVerificationToken_L3Nfg4dwc3Bh0=YGwlXkckjhg6xTESkI-lN9sNtDVsfefshsrvGWPKekmv_GLZ0Rq8eA5P8Z7sdf4trwbPX4WymcGJJrLamQLMe2Vf2D2fVUg4qJptOvcsCWg1; ASP.NET_SessionId=gk4s1rlsfg5gfeafo3455dkr; .ASPXAUTH=C8113FD23FC4902dsfrsdf5FB3399BA121703F41F9A57AEA50667F2AD4FC02F3D3955215A91F6A3A2EA4287202522380435A93D8BE78D45E6D24FB7E05F64653AE06E0026DEB2911343591563F70EE8EE76338F07CBABE6EA4B95359F3C31sdf9C999sdf2864849gfdB916A06gfds29E3C8D01D2371807E98335000D4D14B391CCE3zxcd49DB77696F4BB77E4434
通过
授权和Cookie参数未添加到具有表单身份验证的azure前端应用程序的请求中
我在azure中查看了我的后端应用程序的身份验证/授权配置。任何人都能知道问题是什么,或者我需要在azure portal中配置什么。提前感谢。此问题是由于cors引起的
您可以通过添加请求来解决此问题
$http({
....
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
withCredentials: true,
})
WEB API的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>
这可能是因为它们不再托管在同一台机器上(取决于您的Azure设置)。我自己也有类似的问题
按照以下URL中的说明匹配应用程序之间的设置,您应该可以:
编辑:使用Access Control Allow Origin:
在响应标题中,这可能不是正常的CORS问题,尽管machineKey
和CORS问题经常同时出现。如果machineKey
修复程序不起作用,请检查您如何处理CORS飞行前检查。请参阅。本地两个应用程序可能都使用本地主机,因此请共享cookie-但一旦部署,它们是单独的应用程序,因此不要共享身份验证cookie@NeilThompson有没有办法将cookies添加到请求中?这个问题解决了吗?