从角色授权更改为声明授权

2023-12-10

我有一个使用 ASP.NET 会员资格构建的 Web 表单应用程序。我成功迁移到身份。

我现在想使用Claims授权而不是Roles授权,但是老用户的Role信息已经迁移到了AspNetUserRoles数据库中的表,但AspNetUserClaims表是空的。迁移后注册的新用户,我可以添加到AspNetUserClaims使用以下代码:

IdentityResult result1 = manager.AddClaim(user.Id, new Claim(ClaimTypes.Role, "role"));

但老用户只在AspNetUserRoles表不在AspNetUserClaims table.

  1. 登录时创建的声明将包含来自AspNetUserRoles表也​​或仅来自AspNetUserClaims table?

  2. 会不会User.IsInRole()检查两个AspNetUserRoles表和AspNetUserClaims table?

  3. 我怎样才能从AspNetUserRoles表到AspNetUserClaims table?


不要迷恋“索赔”一词。这是向 cookie 添加信息的便捷方法。

这里实际上有两种类型的“声明”——一种添加到 cookie 中,另一种保留在AspNetUserClaims table.

当用户登录时,会创建一个具有身份的 cookie。身份包含用户拥有的所有声明。这里的 Claim 是作为有效负载添加到 cookie 中的键值对。 Cookie 声明包含以下内容User.Id, SecurityStamp, Username一些其他与框架相关的东西和......来自的角色列表AspNetUserRoles。连同其他索赔AspNetUserClaims.

因此,您试图将角色添加到声明中的内容是没有意义的。无论如何,角色将作为声明存在于 cookie 中 - 由框架添加。

可能我解释得不好 - 当你调试你的应用程序时,分析User控制器的属性并查看ClaimsIdentity并查看所有索赔的列表。我所有的胡言乱语都会变得更有意义。

回答你的第二个问题——User.IsInRole()不进入数据库。该方法只检查cookie中的信息,参见自己的源代码:它只检查 cookie 是否包含声明类型ClaimTypes.Role与您要检查的角色的名称。

第三个问题...你还想这样做吗?您可以执行 SQL 语句,例如insert into aspnetuserclaims (<columns>) select <columns> from aspnetUserRoles inner join aspnetroles on aspnetUserRoles.roleid = aspnetroles.id.

我写了关于 cookie 中包含哪些声明的内容不久前在我的博客中- 您将更好地理解这一切是如何结合在一起的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从角色授权更改为声明授权 的相关文章

随机推荐

  • fillStyle 不是函数

    我收到一个不寻常的错误 ctx wrap fillStyle 不是函数 在这一行 ctx wrap fillStyle b8b8b8 in here this paint function self path ctx wrap if isO
  • ?打印心形符号时

    抱歉问了一个愚蠢的问题 我们正在尝试将心形符号从数据库打印到 Java XML 文件 但同样的内容被打印为 不知道我在哪里失踪了 已经尝试过 char unicode 作为实践 我尝试在 main 方法中使用它 请找到示例 java 类 p
  • ListView QML 的 roleName 中的 QSqlQueryModel 引用错误

    我想从我的 SQlite 数据库中获取模型 当我在 QSqlQueryModel 中设置查询时 我可以获得行数 列数等 但是每列内的数据我有一个 ReferenceError 试图获取柱子 cpp代码 data base users QSq
  • AVPlayer 在 iPhone 上不会在结束中断时恢复播放,但在 iPad 上会恢复播放

    我正在为 iPhone 和 iPad 编写一个广播应用程序 在处理中断的暂停和播放音频时遇到一些奇怪的行为 我正在使用 AVAudioSession 委托方法beginInterruption and endInterruption分别到p
  • ID3 Java 枚举树

    我正在尝试制作一个非二元学习树 它是 ID3 算法的简化版本 为此 我尝试使用枚举 因为有几个参考文献教授枚举层次结构 但我在将枚举转移到创建树所需的函数时遇到了麻烦 我已经尽我所能地设置了树所需的一切 但我在树的初始构建方面遇到了麻烦 首
  • c中int和short的行为

    我想知道以下代码输出的原因是什么 unsigned short a 10 aa 1 if a gt 1 printf surprise else printf No surprise 这给出了输出 惊喜 unsigned int a 10
  • 避免来自 Java 标准输入流的控制序列(如 ^[[C)

    Code import java util Scanner public class Try public static void main String args Scanner sc new Scanner System in Syst
  • 在 PHP 中执行存储过程后调用 odbc_fetch_array 会出现错误 [Microsoft][ODBC SQL Server Driver]无效描述符索引

    因此 我尝试使用 ODBC 在 SQL 数据库中执行存储过程 但它返回错误 odbc fetch array function odbc fetch array SQL error Microsoft ODBC SQL Server Dri
  • 如何在一个集合视图源上逐个应用多个过滤器函数(AND 关系)

    我一直在使用绑定到列表视图的 Collection View Source 对象 而 CVS 是 Observable Collection 对象之上的视图 我知道如何使用以下技术应用过滤器 cvs Filter new FilterEve
  • std::string 相当于具有空字符的数据?

    我想读取一个二进制文件并使用类似的东西std string自动调整缓冲区大小等 我正在使用 Visual C 我有什么选择 The std string类已经处理带有嵌入 NUL 字符的数据 您遇到什么问题 请注意 当使用 c str 方法
  • dropna 后 Nans 未删除

    我有一个 400 x 25 的数据框 我应该从数据集中删除所有 Nans 然后从 25 列中仅选择 3 列进行处理 我已经使用以下方法完成了此操作 df1 dropna axis 0 df2 df1 loc bgr wc rc df2 rc
  • 有限制的 OWL 类型推断

    我正在使用 FaCT 和一个简单的本体研究 Protege 4 的 OWL 限制概念 假设我有一个人foo班级的Something Something a owl Class foo a Something owl NamedIndivid
  • SAPUI5 智能表:如何将我自己的列注入智能表、默认列、定义格式化程序和定义聚合列

    我正在使用智能表 我想了解以下有关此事的信息 如何使某些列默认可见 我们如何将自己的列注入到智能表中 比如我们想显示 基于性别 男性或女性 的图标 我们如何设置聚合列 例如名称 名字 姓氏 如何定义聚合列的排序和过滤 XML View
  • 从 gridview 中删除行

    我有 2 个表 MachineGroups 和 Machines MachineGroups 有列 MachinegroupID MachineGroupName MachineGroupDesc 机器有专栏 MachineGroupID
  • 如果特定命令失败,请勿中止脚本

    我正在运行我的脚本 bin bash eu 每当出现问题时 就会根据需要中止脚本 但有时我预计其中一个命令最终会失败 我想告诉bash忽略失败条件 在make您可以使用以下命令忽略一个命令的状态 command 有类似的东西吗bash 唯一
  • 如何将c/c++编译为ms-dos .com程序?

    我将 Code Blocks 与 GNU GCC 编译器一起使用 我的问题是 有没有办法将 c c 代码编译为 ms dos 16 位 com 可执行格式 我尝试设置构建选项并在网上搜索编译器参数 但我找不到任何东西 您当然可以将 C 和
  • 地理定位 SQL 查询未找到确切位置

    我已经测试我的地理位置查询一段时间了 直到现在我还没有发现任何问题 我试图搜索给定半径内的所有城市 通常我会使用该城市的坐标来搜索该城市周围的城市 但最近我尝试在一个城市周围搜索 发现城市本身没有返回 我的数据库中有这些城市的摘录 city
  • Java SQL 日期偏差 1 天

    我正在使用与我位于同一时区的 MySQL 服务器 我试图将 java util Date 插入数据库中的类型列DATE使用以下代码 SimpleDateFormat dateFormat new SimpleDateFormat yyyy
  • 使用鼠标在 python tkinter 画布上绘制并获取指向列表的点?

    我正在使用 tkinter 开发 Python 应用程序 我想要做的是在画布坐标上绘制 并将点记录到列表中 以便稍后进行计算 如果不可能 您会推荐任何其他可以做到这一点的工具或 GUI 平台吗 编辑 到目前为止 我拥有的是一个可以从列表中获
  • 从角色授权更改为声明授权

    我有一个使用 ASP NET 会员资格构建的 Web 表单应用程序 我成功迁移到身份 我现在想使用Claims授权而不是Roles授权 但是老用户的Role信息已经迁移到了AspNetUserRoles数据库中的表 但AspNetUserC