Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么是泛型?_C#_Asp.net_Authentication - Fatal编程技术网

C# 什么是泛型?

C# 什么是泛型?,c#,asp.net,authentication,C#,Asp.net,Authentication,任何人都可以简要说明GenericEntity的用途以及在何处使用它。您可以使用GenericEntity作为标识的具体实现,您希望自己以编程方式提供有关当前用户的详细信息。如果您已经通过其他渠道亲自识别并验证了用户,则非常好。请退出 你会在上面找到一些例子。它代表一个通用用户 身份验证和配置文件体验 generientity和GenericPrincipal是将用户描述为“主体”的最简单方式。这可用于在应用程序中进行不知道实现的安全检查-即,如果用户以“Fred”身份登录,并具有“user”

任何人都可以简要说明GenericEntity的用途以及在何处使用它。

您可以使用GenericEntity作为标识的具体实现,您希望自己以编程方式提供有关当前用户的详细信息。如果您已经通过其他渠道亲自识别并验证了用户,则非常好。

请退出

你会在上面找到一些例子。它代表一个通用用户


身份验证和配置文件体验

generientity
GenericPrincipal
是将用户描述为“主体”的最简单方式。这可用于在应用程序中进行不知道实现的安全检查-即,如果用户以“Fred”身份登录,并具有“user”和“Admin”权限:

    string[] roles = { "User", "Admin" };
    Thread.CurrentPrincipal = new GenericPrincipal(
        new GenericIdentity("Fred"), roles);
您可以在客户端登录winform时执行此操作,也可以在WCF、ASP.NET等中执行此操作

然后,以后的代码不必知道这些权限是如何处理的,就可以通过以下方式检查该权限:

[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服务、数据库、active directory等对话),并缓存结果以备将来访问。当潜在角色的列表很大,而现实中通常查询的角色数量很小时,这非常有用

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

使用“主体”很有用,因为您的逻辑处理代码可以谈论标识,而不必知道这是否是winforms、ASP.NET、WCF、windows服务等—这是抽象的。此外,一些第三方代码也会与委托人对话

作为另一个示例-我编写了一些演示如何使用主体通过设计器(通过
IExtenderProvider
-将额外条目放入VS中的属性网格)控制对winform控件的访问的示例。

GenericEntity类:- GenericEntity类实现IIdentity接口。它表示基于应用程序定义的自定义身份验证方法的用户身份。 一般主要类别:-
GenericPrincipal类实现IPrincipal接口。它表示独立于Windows用户及其角色而存在的用户和角色。本质上,泛型主体是应用程序身份验证和授权的简单解决方案。

泛型主体类可与泛型主体类结合使用,以创建独立于Windows域的授权方案

GenericIdentity myIdentity = new GenericIdentity("MyUser");

请用示例c解释PrincipalPermission属性是如何工作的?如果调用方法时Thread.CurrentPrincipal不包含正确的角色或其他内容,是否会引发异常?@Svish-确切地说(
SecurityException
);它是运行时直接作用的(少数)属性之一。我正在尝试这样做,但无法通过编程在继承自
GenericEntity
的类上设置
.IsAuthenticated
属性。我得到错误:
Property或indexer'System.Security.Claims.ClaimsIdentity.IsAuthenticated'无法分配到--它是只读的
有什么想法吗?我最终通过使类实现
IIdentity
来解决这个问题,并提供了这些属性的我自己的实现。