c# - 如何从另一个本地主机验证用户?

标签 c# asp.net-mvc

我正在设计 2 个网站(localhost:44300localhost: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() 方法仍然接受该请求并继续上传。

我想到了帐户。但是我怎样才能从本地主机登录到另一个本地主机呢?我无法将 usernamepassword 放入 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/

相关文章:

c# - C# 中的静态变量

asp.net-mvc - 如何在Url.Action中传递Area?

asp.net-mvc - 单个 Controller 的 MVC 多个 View

javascript - MVC 手动序列化复杂对象或模型绑定(bind)

c# - 为什么我的.NET正则表达式无法正常工作?

c# - NHibernate QueryOver NullReferenceException

javascript - MVC Ajax调用问题

asp.net-mvc - 我可以在没有成员身份的情况下创建 ASP.NET 用户吗?

c# - EF 迁移 - 在迁移期间使用 C# 业务逻辑修改现有数据

c# - 把上午改成下午?