什么是GenericIdentity?

任何人都可以简单地解释一下GenericIdentity的用途以及在哪里使用它。

GenericIdentityGenericPrincipal是将用户描述为“主体”的最简单方法。 这可用于在应用程序中实现不知情的安全检查 – 即,如果用户使用“用户”和“管理员”权限登录为“Fred”:

  string[] roles = { "User", "Admin" }; Thread.CurrentPrincipal = new GenericPrincipal( new GenericIdentity("Fred"), roles); 

您可以在客户端登录winform时执行此操作,或者在WCF,ASP.NET等中有特定点可以执行此操作。

然后,稍后的代码,无需知道如何处理这些权限,可以通过IsInRole或声明性地检查该权限:

 [PrincipalPermission(SecurityAction.Demand, Role = "Admin")] void SomeAdminFunction() { } 

这里一些有用的实用程序代码是关于委托人/身份的空安全包装:

 public static string GetUsername() { IPrincipal principal = Thread.CurrentPrincipal; IIdentity identity = principal == null ? null : principal.Identity; return identity == null ? null : identity.Name; } public static bool IsInRole(string role) { IPrincipal principal = Thread.CurrentPrincipal; return principal == null ? false : principal.IsInRole(role); } 

然后,您可能在DAL中有一些审计代码:

 row.UpdatedBy = MyUtilityClass.GetUsername(); 

GenericPrincipal对于普通用户名和一组已知角色的简单情况很有用。 例如,更复杂的主要实现可能会执行“按需”访问检查 – 即直到您要求它不知道的“Foo”角色 – 然后它会发现(通过与Web服务,数据库交谈,活动 – 目录等)并缓存结果以供将来访问。 当潜在角色列表很大并且实际上通常查询的角色数量很少时,这很有用。

您还可以使用主体来存储仅在某些上下文中需要的额外身份信息 – 例如,安全令牌。 调用者可以测试主体,看它是否支持额外的数据。

使用“principal”很有用,因为你的逻辑处理代码可以谈论身份,而不必知道这是winforms,ASP.NET,WCF,Windows服务等 – 它是抽象的。 此外,一些第三方代码也将与校长交谈。

作为另一个例子 – 我在这里编写了一些示例代码 ,演示了如何使用principal通过设计器控制对winform控件的访问(通过IExtenderProvider – 将额外的条目放入VS中的属性网格)。

您可以使用GenericIdentity作为Identity的具体实现,您希望以编程方式自己提供有关当前用户的详细信息。 如果您已通过其他渠道自行识别和validation用户,那就太好了。

查看

http://msdn.microsoft.com/en-us/library/system.security.principal.genericidentity.aspx

你会在那里找到一些例子。 它代表一般用户。

身份validation和配置文件限制。

GenericIdentity类: – GenericIdentity类实现IIdentity接口。 它表示基于应用程序定义的自定义身份validation方法的用户身份。 GenericPrincipal类: – GenericPrincipal类实现IPrincipal接口。 它表示独立于Windows用户及其角色的用户和角色。 从本质上讲,通用主体是应用程序身份validation和授权的简单解决方案。