asp.net - 不使用 OAuth/外部身份验证提供程序时,ASP.Net 身份声明有用吗?

标签 asp.net asp.net-identity claims-based-identity

我所读到的有关基于声明的身份验证的所有内容本质上都是关于将您的身份验证过程“外包”给受信任的第 3 方。

看:
Explain "claims-based authentication" to a 5-year-old
Why Claim based authentication instead of role based authentication

显然,这很适合使用 Facebook 或 Google 之类的东西进行身份验证。但是如果没有第三者呢? 如果您只需要用户针对内部数据库进行身份验证怎么办? 例如,在公司环境中。是否有任何理由对普通的旧角色使用声明?如果是这样,一些具体的例子会有所帮助。

到目前为止我对 claim 的了解:

  • 我知道声明是键/值对,而不是像角色这样的 bool 值。
  • 我了解声明可以存储角色。
  • 如果我理解正确,声明会存储在身份验证 cookie 中(也许这是关键 - 与角色相比,数据库调用更少?)。
  • 最佳答案

    原因有很多,包括你提到的这些。

    另一个原因是表单例份验证模块无法处理太大的 cookie。只需添加几百个角色并超过允许的最大 cookie 大小 (4kb),您就很不走运了。处理声明 cookie 的 session 身份验证模块会自动将太大的 token 拆分为多个 cookie。如果您不想拥有多个 cookie,只需简单地切换到“ session 模式”即可自动将大 token 存储在 session 容器中,而 cookie 仅包含一小部分信息来反射(reflect)这一点。

    声明驱动 cookie 的另一个论点是,您可以处理任何自定义数据,包括租户名称(在 Multi-Tenancy 应用程序中)、家庭组织名称、年龄,以及您以后可能需要的任何数据。 Forms cookie 具有自定义数据部分,但它只是一个字符串,因此您需要一个自定义序列化程序才能在此处获取结构化数据。

    所有这些都是由 session 身份验证模块完成的,坦率地说,它很容易胜过表单模块。将您的表单例份验证切换到新模块也很容易,我前段时间在博客上写过(其他人也写过关于它的博客):

    http://www.wiktorzychla.com/2012/09/forms-authentication-revisited.html

    关于asp.net - 不使用 OAuth/外部身份验证提供程序时,ASP.Net 身份声明有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23836001/

    相关文章:

    asp.net - 返回项、Json(item) 和 Ok(item) 之间的 IHttpActionResult 区别

    c# - 在 Asp.net Core 中获取 UserManager 类的对象?

    c# - .NET MVC Core 2.2 - 无法访问用户相关实体(外键)

    asp.net - 使用 asp.net Identity 的 WebAPI2 中的多个 token 生命周期

    c# - : customize asp. 网络核心身份授权最佳实践

    Asp.net,在哪里存储登录用户的用户名?

    c# - 如何在 asp.net 网站中添加 "service reference"?

    c# - ASP.NET MVC - 登录成功,但 userId 返回 null

    asp.net-mvc - ASP.NET MVC 应用程序中条件编辑操作的基于声明的授权设计

    claims-based-identity - nameidentifier 声明的目的是什么?