我正在设计 2 个网站(localhost:44300
和 localhost:44301
)。第一个上传图片,第二个将图片存储为图片托管。
在第二个网站的主页 Controller 中,我声明:
[HttpPost]
public ActionResult UploadImages()
{
//logic...
}
第一个网站中的脚本:
$.ajax({
url: 'https://localhost:44301/Home/UploadImages',
type: 'POST'
}).done(function (data) {
//logic...
})
这很好,但是:如果 localhost:44301
不是由 localhost:44300
(另一个网站)发送的请求,会发生什么情况?
UploadImages()
方法仍然接受该请求并继续上传。
我想到了帐户
。但是我怎样才能从本地主机登录到另一个本地主机呢?我无法将 username
和 password
放入 ajax。攻击者很容易阅读。
我有两个问题:
这种情况下用account好吗?如果没有,你能给我一些提示吗?
谢谢!
最佳答案
实际问题是处理应用程序之间的服务器到服务器身份验证,而不是特别允许内部访问和拒绝外部访问。
看到上面OP和JB King的讨论。我真正推荐的是你使用 Azure Blob Storage或 Amazon S3 存储。然后您可以轻松地在应用程序之间读取或写入二进制数据。
另一种选择是只使用常规的表单例份验证,但您让 site1 将用户名和密码发布到登录操作,并在响应中取回身份验证 cookie。您只需保留 auth cookie 并将其注入(inject)从 site1 到 site2 的任何出站请求。
旧答案:
如果要对请求是否为本地请求执行授权,则需要实现自定义 AuthorizeAttribute
它看起来类似于
public class LocalOnlyAuth : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (false == filterContext.RequestContext.HttpContext.Request.IsLocal)
{
filterContext.Result =
new HttpStatusCodeResult(HttpStatusCode.Forbidden, "Origin is forbidden");
}
}
}
你会应用它
[LocalOnlyAuth]
public class HomeController : Controller
关于c# - 如何从另一个本地主机验证用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34520406/