【问题标题】:Custom ClaimsPrincipal in Asp.Net 5 (Mvc 6)Asp.Net 5 (Mvc 6) 中的自定义 ClaimsPrincipal
【发布时间】:2021-08-26 22:15:32
【问题描述】:

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

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

非常感谢任何帮助。谢谢!:)

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc


    【解决方案1】:

    基本答案是不要 - 尝试实现自己的安全代码通常是个坏主意;有很多选择可以为您节省大量的前期时间,也可以为您节省很多后勤方面的麻烦。

    另一个答案是你不能——它内置于新框架from the beginning.

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

    相反,我建议您构建自己的 ClaimTypes 并使用除 ones built in to the framework. 之外的那些根据您对用户进行身份验证的方式,您应该能够在创建 @987654326 时添加它们@,无论如何。

    【讨论】:

    • 这是不真实的。有一整节专门用于创建您自己的身份验证方案,甚至为您提供一种使用 cookie 中间件来集成您的身份验证令牌的方法 (docs.asp.net/en/latest/security/authentication/cookie.html)。身份框架非常繁重,并附带了所有内容(角色、权限等),这通常不适合手头的系统。更不用说它的假设和缺乏对现代的、基于电话号码的身份验证的支持了,你必须绕过框架才能完成等等。
    • 对不起,我想我不明白,@Marchy。看起来提供的链接使用现有的ClaimsPrincipal,而不是覆盖它,并且虽然它不使用 EF Identity 框架插件(我不提倡),但它确实使用了 @mikal 请求覆盖的部分.如果我弄错了,也许你可以提供你自己的答案?
    • @MattDeKrey 乍一看,可以实现类似于hereCustomClaimsPrincipal 以隐藏所有拥有/查找/获取声明机制的内容。让该主体代替常规注入(不知道如何,在某些过滤器中或通过身份验证框架提供的钩子)。然后在每个控制器中,您可以将this.User 转换回您的CustomClaimsPrincipal 并以类型安全的方式获取属性。为什么这是个坏主意?谢谢
    • 实现自己的安全代码是个坏主意,因为最终,在测试 ClaimsPrincipal 的实例化和创建方式上投入了大量精力,除非您是一家微软规模的公司,你不会匹配那个。正如@superjos 评论中的链接所述,您可以使用 ClaimTypes 来存储您的新信息,但我建议使用扩展方法来避免继承并避免覆盖框架本身提供的安全代码......所有这些都没有使用身份框架。
    【解决方案2】:

    简答 - 在中间件中将自定义 .User 分配给 HttpContext

    长答案:Where to set custom ClaimsPrincipal for all HttpRequests

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 2016-03-15
      • 1970-01-01
      • 2016-09-11
      • 2019-01-24
      • 2013-11-25
      • 1970-01-01
      • 2016-10-06
      • 2012-10-07
      相关资源
      最近更新 更多