在Asp.Net MVC 3中,AuthorizeAttribute的身份验证用户是什么?

在Asp.Net MVC 3中,AuthorizeAttribute的身份验证用户是什么?

问题描述:

我发现Asp.Net中的很多东西都是基于假定的知识。例如,我对互联网认证知之甚少,并且很难在初学者的层面上找到任何有关它的信息。在Asp.Net MVC 3中,AuthorizeAttribute的身份验证用户是什么?

令我困惑的一件事是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进行足够的身份验证以允许他进入?

它检查的IIdentity的IsAuthorized。

在Global.asax中添加一个方法来处理“AuthorizeRequest”。然后在方法做,你需要检查用户被授权(检查会话,饼干,数据库等)

然后HttpContext.Current.User设置为GenericPrincipal有一个实现IIdentity的并具有用户什么都它的IsAuthorized设置为true。

事情是这样的:

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; 
    } 
    } 
+2

+1 - 没有告诉OP的好答案“去买书或缺乏基本知识“ – 2012-03-12 14:03:36

+0

谢谢,有时候一个简单的例子说明的不仅仅是一段文字。 – TWith2Sugars 2012-03-12 14:04:23

+0

如果我得到一个SAML证书以及用户身份验证是我想要存储somwhere的东西,比如在cookie或HttpContext中? – 2012-03-12 14:31:50

HttpContext.Current.User包含User对象,它是当前登录的用户。虽然在Controller内,但这也可以从User获得。

+0

其IsAuthorized:) – 2012-03-12 14:04:01

+0

谢谢,我忘了提授权 - 只是去了验证。 – 2012-03-12 14:07:18

如果你需要初学者水平的知识,那么你需要去买一本好书。快速的Amazon.com搜索显示了对Pro ASP.NET MVC 3框架的大量支持,所以这可能是一个很好的开始。像这样一本书的价值在于它会引导您通过构建Web应用程序(包括身份验证)的前后例子。

至于安全..你不想建立自己的..特别是如果你是初学者。这很容易导致错误并最终导致混乱(在那里......做到了这一点)。你想要做的是使用内置身份验证。再次,一本书将是一个很好的开始,但另外从内置模板开始,并遵循这个walkthrough。完成之后,开始阅读代码并将类名称用作Google搜索点。

+0

把东西运到美国以外的地方可能会有很多问题,但一本书会有帮助。内置身份验证在本项目中无助于我,我将使用其中的一部分,但人员未在本地进行身份验证,除非默认系统支持SAML证书,否则对我来说没有多大作用。 – 2012-03-12 14:40:27

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

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

特别地,早期的某处是AuthenticateRequest事件,其中插入模块可能可能设定的用户进行认证。他们是怎么做到的?通过将当前HttpContextUser设置为不同于null的其他值,其中Identity.IsAuthenticated评估为true

由于上下文的User属性不束缚于任何特定类型的(而它可以是其类型已从IPrincipal继承的任何值)任何认证提供商是可能的。

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

+0

是的,我真的需要学习基本的东西。我总是不知道幕后发生了什么。我猜我应该花时间。在Web.config中,身份验证设置为“窗体”,那么是否会为我自动执行某些操作? – 2012-03-12 14:35:46

+0

是的。表单意味着'用户'将通过表单身份验证模块从cookie解析。由于它在MVC和WebForms中几乎以相同的方式工作,所以您可以阅读任何Forms Authentication教程('MembershipProvider'和'RoleProvider'等等) – 2012-03-12 16:02:20