Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Asp.net core Asp.NET5(MVC6)中的自定义ClaimsPrincipal_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

Asp.net core Asp.NET5(MVC6)中的自定义ClaimsPrincipal

Asp.net core Asp.NET5(MVC6)中的自定义ClaimsPrincipal,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,如何覆盖Asp.Net 5(MVC-6)中类型为System.Security.Claims.ClaimsPrincipal的默认Context.User 我想使用我的自定义用户类型,以便在控制器(HttpContext.User)以及Razor视图(@User.)中可以访问它 非常感谢您的帮助。谢谢!:) 基本的答案是不要——尝试实现自己的安全代码通常是个坏主意;有很多选择,可以为你节省大量的前期时间,也可以为你节省大量的后顾之忧 另一个答案是你不能——它内置于新的框架中 这就是用户POCO模

如何覆盖Asp.Net 5(MVC-6)中类型为
System.Security.Claims.ClaimsPrincipal
的默认
Context.User

我想使用我的自定义用户类型,以便在控制器(
HttpContext.User
)以及Razor视图(
@User.
)中可以访问它


非常感谢您的帮助。谢谢!:)

基本的答案是不要——尝试实现自己的安全代码通常是个坏主意;有很多选择,可以为你节省大量的前期时间,也可以为你节省大量的后顾之忧

另一个答案是你不能——它内置于新的框架中

这就是用户POCO模型的用途。Identity框架以这种方式运行(我认为从一开始就是这样),它反映了OAuth和大多数其他身份验证/授权系统。这是一个非常灵活和高效的模型


相反,我建议您构建自己的
ClaimTypes
,并使用这些类型。根据您对用户进行身份验证的方式,您应该能够在创建
IPrincipal
时添加它们。

这是不正确的。有一整节专门介绍如何创建您自己的身份验证方案,甚至为您提供了一种使用cookie中间件集成身份验证令牌()的方法。身份框架非常繁重,并且包含所有内容(角色、权限等),这些内容通常不适合当前的系统。更不用说它的假设和缺乏对现代的、基于电话号码的认证的支持了,你必须绕过这个框架才能实现等等。很抱歉,我想我不明白,@Marchy。看起来提供的链接使用了现有的
ClaimsPrincipal
,没有覆盖它,而且,虽然它没有使用EF Identity framework插件(我不提倡),但它确实使用了@mikal请求覆盖的部分。如果我错了,也许你可以提供你自己的问题答案?@MattDeKrey乍看之下,你可以实现一个类似的
CustomClaimsPrincipal
,以隐藏所有拥有/找到/获取索赔机制的东西。将该主体替换为常规主体(不知道如何,在某些过滤器中或通过auth框架提供的钩子)。然后在每个控制器中,您可以将
this.User
强制转换回您的
CustomClaimsPrincipal
并以类型安全的方式获取属性。为什么这是个坏主意?ThanksIt实现您自己的安全代码是个坏主意,因为最终,在测试ClaimsPrincipal的实例化和创建方式方面投入了大量的精力,除非您是一家微软规模的公司,否则您将无法与之匹敌。正如@superjos评论中的链接所述,您可以使用ClaimTypes来存储新信息,但我建议使用扩展方法来避免继承和覆盖框架本身提供的安全代码。。。所有这些都没有使用身份框架。