ASP.NET平台通过HttpContext对象提供一些关于用户的有用信息,该对象由Authorize注解属性使用 的,以检查当前请求的状态,考察用户是否已被认证。HttpContext.User属性返回的是IPrincipal 接口的实现,该接口是在System.Security.Principal命名空间中定义的。
IPrincipal接口:
ASP.NET平台通过HttpContext对象提供一些关于用户的有用信息,该对象由Authorize注解属性使用 的,以检查当前请求的状态,考察用户是否已被认证。HttpContext.User属性返回的是IPrincipal 接口的实现,该接口是在System.Security.Principal命名空间中定义的。IPrincipal接口定义了 如下表所示的属性和方法:
名称 | 描述 |
Identity | 返回IIdentity接口的实现,它描述了与请求相关联的用户 |
IsInRole(role) | 如果用户是指定角色的成员,则返回true |
IIdentity接口:
IPrincipal.Identity属性返回的IIdentity接口实现通过一些属性提供了有关当前用户的一些基本却有用的信息,下表描述了这些属性:
名称 | 描述 |
AuthenticationType | 返回一个字符串,描述了用于认证用户的机制 |
IsAuthenticated | 如果用户已被认证,返回true。 |
Name | 返回当前用户的用户名 |
ASP.NET Identity含有一个处理AuthenticateRequest生命周期事件(第3章曾做过描述)的模块,并使 用浏览器发送过来的Cookie确认用户是否已被认证。 Identity用于IIdentity接口的实现类,其名称为ClaimsIdentity。
如果用户已被 认证,此ASP.NET框架模块便会将IIdentity.IsAuthenticated属性的值设置为true,否则设置为 false。(此刻尚未实现让用户进行认证的特性,这意味着在本示例应用程序中,IsAuthenticated 属性的值总是false。)
PasswordValidator类:
一个最常用的需求,特别是对于公司的应用程序,是强制口令策略。ASP.NET Identity提供了一个 PasswordValidator类,可以用下表所描述的属性来配置口令策略:
名称 | 描述 |
RequiredLength | 指定合法口令的最小长度 |
RequireNonLetterOrDigit | 当设置为true时,合法口令必须含有非字母和数字的字符 |
RequireDigit | 当设置为true时,合法口令必须含有数字 |
RequireLowercase | 当设置为true时,合法口令必须含有小写字母 |
RequireUppercase | 当设置为true时,合法口令必须含有大写字母 |
定义口令策略的办法是,创建一个PasswordValidator类实例、设置其属性的值,并在OWIN用来实例化UserManager类的Create方法中将该对象作为PasswordValidator属性的值。
还可以执行更一般的验证,办法是创建UserValidator类的实例,并使用它所定义的属性,以限制用 户其他属性的值。下表描述了UserValidator的属性:
名称 | 描述 |
AllowOnlyAlphanumericUserNames | 当为true时,用户名只能含有字母数字字符 |
RequireUniqueEmail | 当为true时,邮件地址必须唯一 |
对用户细节执行验证的做法是创建UserValidator类实例,并在OWIN用来创建实例的Create方法中, 将它赋给用户管理器类的UserValidator属性。
IdentityResult接口:
CreateAsync方法的结果是一个IdentityResult接口的实现,它通过下表的属性描述操作的输出。
名称 | 描述 |
Errors | 返回一个字符串枚举,其中列出了尝试操作期间所遇到的错误。 |
Succeeded | 在操作成功时返回true |