Asp.Net 用户验证(自定义IPrincipal和IIdentity) 2008-12-7 作者: 张子阳 分类: Asp.Net 引言 前一段时间有两个朋友问我,为什么在HttpModule...除此以外,还有一个原因,就是.Net验证机制的核心IPrincipal和Identity提供的信息用户信息太少了,当在页面后置代码中使用继承来的User属性(IPrincipal类型)时,它的Identity...实际上,我们可以自定义一个IPrincipal和IIdentity来完成,接下来就来看一下。...自定义IPrincipal和IIdentity 不管是在Windows上还是在Web上,.Net都使用这两个接口来实现用户的身份验证。...从这个角度上来看,自定义IPrincipal和IIdentity并没有太大的意义。 这里,我们最好是定义一个自己的类型来承载用户数据,下面我们就看下如何完成。
在.NET基于安全的应用编程接口中,通过IPrincipal接口表示安全主体。...目录 一、IPrincipal 二、WindowsPrincipal 三、GenericPrincipal 四、 基于安全主体的授权 一、IPrincipal...用以表示安全主体的IPrincipal接口定义在System.Security.Principal命名空间下。...IPrincipal的定义体现在如下的代码片断中,从中我们可以看出IPrincipal仅仅具有两个成员。...实际上IPrincipal也具有相类似的实现类型:WindowsPrincipal和GenericPrincipal,它们均定义在System.Security.Principal命名空间下。
cancellationToken) { return Task.FromResult(0); } private Task AuthenticateAsync(HttpRequestMessage request) { return Task.Run(()
那么我们来看这个属性在CSLA中的源代码: private static IPrincipal _principal; public static IPrincipal User { get ...{ IPrincipal current; if (HttpContext.Current !...为了最少地改动原有代码,我把字段的代码修改为: [ThreadStatic] private static IPrincipal __principalThreadSafe; private static...IPrincipal __principal; private static IPrincipal _principal { get { return _executionLocation
windows后,能安装软件、修改windows设置等所有操作,而Guest用户登录后,只有做有限的操作(比如安装软件就被禁止了). .net中与"认证"对应的是IIdentity接口,而与"授权"对应的则是IPrincipal...{ IIdentity Identity { get; } bool IsInRole(string role); } } 应该注意到:IPrincipal...membership/role的原理就是基于这二个接口的,如果再对HttpContext.Current.User刨根问底,能发现下面的定义: 即:HttpContext.Current.User本身就是一个IPrincipal...其实...就算不用membership/role,上面提到的这二个接口仍然是可以使用的,但有一个问题:winform中,IPrincipal接口的实例可以一直存储在内存中(直到程序退出),所以其它窗口就能继续访问它...协议本身是无状态的,但是每个aspx页面被请求时,总会附带一个HttpContext上下文,可以用它来找回一些前世的记忆,而且文章最开头提到了 HttpContext.Current.User本身就是IPrincipal
ICallContextInitializer 2: { 3: public void AfterInvoke(object correlationState) 4: { 5: IPrincipal...principal = correlationState as IPrincipal; 6: if (null !...ServiceSecurityContext.Current); 15: return originalPrincipal; 16: } 17: protected abstract IPrincipal...WindowsAuthorizationCallContextInitializer:AuthorizationCallContextInitializerBase 2: { 3: protected override IPrincipal...5: { 6: this.RoleProvider = roleProvider; 7: } 8: protected override IPrincipal
windows后,能安装软件、修改windows设置等所有操作,而Guest用户登录后,只有做有限的操作(比如安装软件就被禁止了). .net中与"认证"对应的是IIdentity接口,而与"授权"对应的则是IPrincipal
CookieAuthenticationDefaults.AuthenticationScheme 这时候,我们已经获得了一个Identity对象,在asp.net core 中 Identity体系还有最后一个关键类: public class ClaimsPrincipal : IPrincipal...public ClaimsPrincipal(); public ClaimsPrincipal(IIdentity identity); public ClaimsPrincipal(IPrincipal...identities); public virtual void AddIdentity(ClaimsIdentity identity); } 这个类提供了几个方法用来存储Identity,这个类在IPrincipal...接下来,让我们反向解析出Principal里面的数据: public interface IPrincipal { IIdentity?...Identity { get; } bool IsInRole(string role); } IPrincipal提供了两个基础数据和方法,一个是获取一个Identity对象,一个是判断是否是某个角色
我们来看下这个类的基本情况吧: public class ClaimsPrincipal : IPrincipal { public ClaimsPrincipal(); public...ClaimsPrincipal(BinaryReader reader); public ClaimsPrincipal(IIdentity identity); public ClaimsPrincipal(IPrincipal
Principal"] = GetPrincipal(userName); 23: return false; 24: } 25: 26: private IPrincipal...operationContext.ServiceSecurityContext.AuthorizationContext.Properties["Principal"] = GetPrincipal(userName); 11: return true; 12: } 13: private IPrincipal
ASP.NET 提供了IPrincipal 和IIdentity接口来表示用户的身份和角色。这两个接口 绑定到HttpContext对象和当前线程。可以通过实习这两个接口来创建自定义的方案。...public class CustomPrincipal : IPrincipal { public IIdentity Identity { get; private set; } public
如果要将属性应用到 Web 应用上下文之外的库代码,请执行以下操作: 通过调用 IPrincipal.IsInRole(String) 方法,在方法开始时手动执行检查。
1: internal sealed class RoleProviderPrincipal : IPrincipal 2: { 3: public RoleProviderPrincipal
那这些证件需要一个载体去容纳,那ClaimsPrincipal这个就相当于是这些证件的载体,我们来看看它的部分核心代码: public class ClaimsPrincipal : IPrincipal...public ClaimsPrincipal(IIdentity identity); public ClaimsPrincipal(IPrincipal
"Submit Order" [C#] IPrincipal principal = new GenericPrincipal(new GenericIdentity(identity), new string...[C#] IPrincipal principal = this.rolesProvider.GetRoles(this.identity); if (principal !
17: public void OnAuthentication(AuthenticationContext filterContext) 18: { 19: IPrincipal...} 44: 45: protected virtual bool IsAuthenticated(AuthenticationContext filterContext, out IPrincipal
我们常用的HttpContext.User属性ASP.NET 4.0时代是IPrincipal类型,ASP.NETCore现在强化为ClaimsPrincipal类型。 ?
2) 默认情况下,这是IPrincipal.Identity.Name,但是可以通过向全局主机注册IUserIdProvider的实现来更改。 x. 连接ID列表中的所有客户端和组。 1) ?
public IPrincipal User { get { return this....SecurityAction.Demand, ControlPrincipal=true)] set { this.SetPrincipalNoDemand(value); } } Iprincipal...类型了System.Security.Principal.IIdentity属性 [ComVisible(true), __DynamicallyInvokable] public interface IPrincipal
public class WindowsPrincipal : IPrincipal{ public WindowsPrincipal(WindowsIdentity ntIdentity); public...public sealed class RolePrincipal : IPrincipal{...}
领取专属 10元无门槛券
手把手带您无忧上云