【发布时间】:2018-07-06 16:05:09
【问题描述】:
我正在尝试集成不同的技术(每个不同的域)并创建 RESTfull 操作。例如,我有一个客户端(Apache cordova)和一个服务器(.NET 框架 4.6.1)。在 WebGet 方法中一切正常,但在其他方法中则不行。 这是我的登录操作测试代码。
Javascript(角度)
$http({
method: 'Put',
url: $rootScope.url + '/Login'
}).then(function successCallback(response) {
}, function errorCallback(response) {
});
变量 $rootScope.url 具有服务器正在运行的 url。
C# MVC .NET
[HttpPut]
[AllowAnonymous]
public async Task<ActionResult> Login()
{
try
{
var result = await SignInManager.PasswordSignInAsync("test3", "1!2@Qa", false, shouldLockout: false);
return null;
}
catch (Exception ex)
{
throw ex;
}
}
当我在网络中拨打这个电话时,我得到了这个
http://localhost:4400/xhr_proxy?rurl=http%3A//localhost%3A49266/App//Login.
通过谷歌搜索,我发现同源策略是此 AJAX 调用失败的原因。
查看this 文章我明白了我们应该使用CORS 的原因。但我不明白如何在生产环境中使用它们的完美方式。
如何确保我的服务器只接受来自我的客户的呼叫?我必须向客户端 javascript 调用添加自定义标头,服务器将检查是否存在?
我找到了一些解决方案,例如
HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");
或
<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
但我认为使用这种方式我会让任何使用 javascript 的网站对服务器进行操作。
如何创建安全的 cors 策略?
【问题讨论】:
标签: .net asp.net-mvc cors cross-domain same-origin-policy