1

我发现 Asp.Net 中的很多东西都是基于假设的知识。例如,我对互联网身份验证知之甚少,并且很难在初学者级别上找到任何有关它的信息。

令我困惑的一件事是 AuthorizeAttribute。我了解如何使用它以及它应该做什么,但我想知道它是否可以在您拥有自定义登录系统的情况下工作。

在 AuthorizeAttribute 页面上的描述中,它简单地说 When you mark an action method with AuthorizeAttribute, access to that action method is restricted to users who are both authenticated and authorized.

那么什么是经过身份验证的用户,如何设置一个用户进行身份验证。如果我创建自己的登录系统,我该如何设置,以便登录用户的身份验证足以让 AuthorizeAttribute 允许他进入?

4

4 回答 4

5

它检查IPrincipal的IIdentity的IsAuthorized 。

在 Global.asax 中添加一个方法来处理“AuthorizeRequest”。然后在该方法中执行您需要检查用户是否已授权的操作(检查会话、cookie、数据库等)

然后将 HttpContext.Current.User 设置为具有实现 IIdentity 的用户并将其 IsAuthorized 设置为 true的GenericPrincipal 。

像这样的东西:

  public class MvcApplication : HttpApplication
  {
    public MvcApplication()
    {
      this.AuthorizeRequest += this.AuthorizedRequestEvent;
    }

    private void AuthorizedRequestEvent(object sender, System.EventArgs e)
    {
      // do checking here with what ever you want
      bool isAuthenicated = false;

      // change this what what ever implements IIdentity
      var user = new User(); 
      user.IsAuthenticated = isAuthenicated ;
      GenericPrincipal principal;
      principal = new GenericPrincipal(user, new string[] { });
      HttpContext.Current.User = principal;
    }
   }
于 2012-03-12T13:56:45.203 回答
1

HttpContext.Current.User包含User当前登录用户的对象。而在 a 里面Controllerthis 也可以从 simple 获得User

于 2012-03-12T13:53:01.570 回答
1

如果你需要初级知识,那么你需要去买一本好书。快速的 Amazon.com 搜索显示对 Pro ASP.NET MVC 3 框架的大量支持,因此这可能是一个很好的起点。像这样一本书的价值在于它将引导您从前到后构建 Web 应用程序(包括身份验证)的示例。

至于安全性..您不想构建自己的..特别是如果您是初学者。很容易出错并以一团糟而告终(去过那里..做到了)。您想要做的是使用内置的身份验证。再一次,一本书将是一个很好的起点,但从内置模板开始,然后按照这个演练。完成之后,开始阅读代码并使用类名作为 Google 搜索点。

于 2012-03-12T13:53:03.367 回答
1

您缺乏有关 ASP.NET 管道如何工作的基本知识。

http://msdn.microsoft.com/en-us/library/bb470252.aspx

特别是,早期的某个地方是AuthenticateRequest插入的模块可能会将用户设置为进行身份验证的事件。他们是怎么做到的?HttpContext通过将 current 设置User为不同于nullwhereIdentity.IsAuthenticated求值的其他值true

由于User上下文的属性未绑定到任何特定类型(而是可以是其类型继承自的任何值IPrincipal) ,因此任何身份验证提供程序都是可能的。

最后一件事——很多人坚持使用表单身份验证模块,从 cookie 中检索信息。

于 2012-03-12T13:55:27.367 回答