Asp.Net 用户验证(自定义IPrincipal和IIdentity) 2008-12-7 作者: 张子阳 分类: Asp.Net 引言 前一段时间有两个朋友问我,为什么在HttpModule...实际上,我们可以自定义一个IPrincipal和IIdentity来完成,接下来就来看一下。...自定义IPrincipal和IIdentity 不管是在Windows上还是在Web上,.Net都使用这两个接口来实现用户的身份验证。...从这个角度上来看,自定义IPrincipal和IIdentity并没有太大的意义。 这里,我们最好是定义一个自己的类型来承载用户数据,下面我们就看下如何完成。...总结 在这篇文章中我们看到了如何使用Asp.Net内置机制实现用户验证的功能,并且通过FormsAuthenticationTicket的UserData属性、自定义IPrincipal和IIdentity
目录 一、IIdentity 二、WinodwsIdentity 三、GenericIdentity 四、X509Identity 五...、服务安全上下文中的身份 一、IIdentity 在.NET的安全应用编程接口中,身份通过System.Security.Principal.IIdentity接口表示。...{ get; } 5: string Name { get; } 6: } 通过IIdentity表示的身份是基于某种认证类型的,不同类型的认证往往对应于不同的身份类型。...如果我们采用自定义的认证方式,是否意味着我们也需要定义一个实现了IIdentity接口的类型呢?实际上是不需要的,我们可以直接使用GenericIdentity这个类型。...GenericIdentity的定义非常简单,仅仅实现了定义在IIdentity接口的三个只读属性而以。我们可以通过指定用户名或者用户名与认证类型来创建一个GenericIdentity对象。
ClaimsIdentity> identities); public ClaimsPrincipal(BinaryReader reader); public ClaimsPrincipal(IIdentity...IEnumerable, ClaimsIdentity> PrimaryIdentitySelector { get; set; } public virtual IIdentity...所以,通过简单的分析,我们需要继续了解这两个类: public class ClaimsIdentity : IIdentity { public ClaimsIdentity(); public...ClaimsIdentity(string authenticationType); public ClaimsIdentity(IIdentity identity); public...public ClaimsIdentity(IEnumerable claims, string authenticationType); public ClaimsIdentity(IIdentity
1: public interface IPrincipal 2: { 3: bool IsInRole(string role); 4: IIdentity Identity...{ get; } 5: } 上面我们具体介绍了IIdentity接口的两个实现,WindowsIdentity和GenericIdentity。...Identity { get; } 9: } 三、GenericPrincipal 而一个GenericPrincipal对象本质上就是对一个IIdentity对象和表示角色列表的字符创数组的封装而以...1: public class GenericPrincipal : IPrincipal 2: { 3: public GenericPrincipal(IIdentity identity..., string[] roles); 4: public virtual bool IsInRole(string role); 5: public virtual IIdentity
介绍完了Claim类之后,我们继续看一下Identity相关的常用类: public class ClaimsIdentity : IIdentity; 通过这个类的声明,我们可以看出它实现了接口:...public interface IIdentity { string?...我们继续看一下ClaimsIdentity的几个关键点: public class ClaimsIdentity : IIdentity { public ClaimsIdentity(string...authenticationType); public ClaimsIdentity(IIdentity identity); public ClaimsIdentity(IEnumerable...接下来,让我们反向解析出Principal里面的数据: public interface IPrincipal { IIdentity?
ClaimsIdentity 我们先来看看ClaimsIdentity的部分代码,代码如下: public class ClaimsIdentity:IIdentity { public ClaimsIdentity...同时ClaimsIdentity继承了IIdentity抽象接口,我们再来看看这个抽象接口的代码: // 定义证件对象的基本功能。...public interface IIdentity { //证件名称 string Name { get; } // 用于标识证件的载体类型。...public ClaimsPrincipal(IEnumerable identities); public ClaimsPrincipal(IIdentity...identity); public ClaimsPrincipal(IPrincipal principal); public virtual IIdentity
/角色识别",好比"管理员用户"登录windows后,能安装软件、修改windows设置等所有操作,而Guest用户登录后,只有做有限的操作(比如安装软件就被禁止了). .net中与"认证"对应的是IIdentity
/角色识别",好比"管理员用户"登录windows后,能安装软件、修改windows设置等所有操作,而Guest用户登录后,只有做有限的操作(比如安装软件就被禁止了). .net中与"认证"对应的是IIdentity...System.Runtime.InteropServices; namespace System.Security.Principal { [ComVisible(true)] public interface IIdentity...System.Security.Principal { [ComVisible(true)] public interface IPrincipal { IIdentity...Identity { get; } bool IsInRole(string role); } } 应该注意到:IPrincipal接口中包含着一个只读的IIdentity...; txtUserName.Focus(); return; } IIdentity _
-Pport 注意是大写的P, port是指定数据传输用到的端口号-iidentity_file: 指定证书文件。-llimit: 限定用户所能使用的带宽,以Kbit/s为单位。
1: IIdentity identity1 = Thread.CurrentPrincipal.Identity; 2: IIdentity identity2 = ServiceSecurityContext.Current.PrimaryIdentity
ASP.NET 提供了IPrincipal 和IIdentity接口来表示用户的身份和角色。这两个接口 绑定到HttpContext对象和当前线程。可以通过实习这两个接口来创建自定义的方案。...public class CustomPrincipal : IPrincipal { public IIdentity Identity { get; private set; } public
ServiceSecurityContext securityContext); 4: public bool IsInRole(string role); 5: public IIdentity
看下ClaimsIdentity的简要代码: public class ClaimsIdentity: IIdentity { public virtual IEnumerable...public ClaimsPrincipal(IEnumerable identities){} //当事人的主身份呢 public virtual IIdentity
[C#] private IIdentity identity; // Identity for authenticated users [Visual Basic] Private identity...As IIdentity ' Identity for authenticated users Obtain the text username and password from the user by
this.SetPrincipalNoDemand(value); } } Iprincipal又有一个名为Identity,类型了System.Security.Principal.IIdentity...DynamicallyInvokable] bool IsInRole(string role); // Properties [__DynamicallyInvokable] IIdentity...Identity { [__DynamicallyInvokable] get; } } [ComVisible(true), __DynamicallyInvokable] public interface IIdentity...DynamicallyInvokable] get; } } IsAuthenticated表示当前请求用户是否已经被验证,IsAuthenticated =false,那么表示这是一个匿名用户,如果为True,那么通过IIdentity
, string value); // ClaimsPrincipal提供了一些辅助方法/属性来检查声明. } var principal = new ClaimsPrincipal(new IIdentity
public AntiForgeryToken GenerateFormToken(HttpContextBase httpContext, IIdentity identity, AntiForgeryToken
HttpContext.Current.User.Identity.IsAuthenticated) 6: { 7: return; 8: } 9: 10: IIdentity
} } 在这个例子中可以看出ASP.NET Identity 已经很好的集成到ASP.NET 平台中,而HttpContext.User.Identity 属性返回一个 IIdentity...} ClaimsAccessAttribute 特性继承自AuthorizeAttribute,并Override了 AuthorizeCore 方法,里面的业务逻辑是当用户验证成功并且IIdentity
领取专属 10元无门槛券
手把手带您无忧上云