在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;
}
}
HttpContext.Current.User
包含User
对象,它是当前登录的用户。虽然在Controller
内,但这也可以从User
获得。
其IsAuthorized:) – 2012-03-12 14:04:01
谢谢,我忘了提授权 - 只是去了验证。 – 2012-03-12 14:07:18
如果你需要初学者水平的知识,那么你需要去买一本好书。快速的Amazon.com搜索显示了对Pro ASP.NET MVC 3框架的大量支持,所以这可能是一个很好的开始。像这样一本书的价值在于它会引导您通过构建Web应用程序(包括身份验证)的前后例子。
至于安全..你不想建立自己的..特别是如果你是初学者。这很容易导致错误并最终导致混乱(在那里......做到了这一点)。你想要做的是使用内置身份验证。再次,一本书将是一个很好的开始,但另外从内置模板开始,并遵循这个walkthrough。完成之后,开始阅读代码并将类名称用作Google搜索点。
把东西运到美国以外的地方可能会有很多问题,但一本书会有帮助。内置身份验证在本项目中无助于我,我将使用其中的一部分,但人员未在本地进行身份验证,除非默认系统支持SAML证书,否则对我来说没有多大作用。 – 2012-03-12 14:40:27
您缺乏关于ASP.NET管道如何工作的基本知识。
http://msdn.microsoft.com/en-us/library/bb470252.aspx
特别地,早期的某处是AuthenticateRequest
事件,其中插入模块可能可能设定的用户进行认证。他们是怎么做到的?通过将当前HttpContext
的User
设置为不同于null
的其他值,其中Identity.IsAuthenticated
评估为true
。
由于上下文的User
属性不束缚于任何特定类型的(而它可以是其类型已从IPrincipal
继承的任何值)任何认证提供商是可能的。
而最后一件事 - 很多人坚持使用表单验证模块从cookie中检索信息。
是的,我真的需要学习基本的东西。我总是不知道幕后发生了什么。我猜我应该花时间。在Web.config中,身份验证设置为“窗体”,那么是否会为我自动执行某些操作? – 2012-03-12 14:35:46
是的。表单意味着'用户'将通过表单身份验证模块从cookie解析。由于它在MVC和WebForms中几乎以相同的方式工作,所以您可以阅读任何Forms Authentication教程('MembershipProvider'和'RoleProvider'等等) – 2012-03-12 16:02:20
+1 - 没有告诉OP的好答案“去买书或缺乏基本知识“ – 2012-03-12 14:03:36
谢谢,有时候一个简单的例子说明的不仅仅是一段文字。 – TWith2Sugars 2012-03-12 14:04:23
如果我得到一个SAML证书以及用户身份验证是我想要存储somwhere的东西,比如在cookie或HttpContext中? – 2012-03-12 14:31:50