C# 从角色授权更改为索赔授权
我有一个webforms应用程序,它是用ASP.NET成员身份构建的。我成功地迁移到身份 我现在想使用声明授权而不是角色授权,但旧用户的角色信息已迁移到数据库中的C# 从角色授权更改为索赔授权,c#,authorization,asp.net-identity,roles,claims,C#,Authorization,Asp.net Identity,Roles,Claims,我有一个webforms应用程序,它是用ASP.NET成员身份构建的。我成功地迁移到身份 我现在想使用声明授权而不是角色授权,但旧用户的角色信息已迁移到数据库中的AspNetUserRoles表中,但AspNetUserClaims表为空。迁移后注册的新用户,我可以使用以下代码添加到AspNetUserClaims: IdentityResult result1 = manager.AddClaim(user.Id, new Claim(ClaimTypes.Role, "role")); 但
AspNetUserRoles
表中,但AspNetUserClaims
表为空。迁移后注册的新用户,我可以使用以下代码添加到AspNetUserClaims
:
IdentityResult result1 = manager.AddClaim(user.Id, new Claim(ClaimTypes.Role, "role"));
但是老用户只在AspNetUserRoles
表中注册,而不在AspNetUserClaims
表中注册
AspNetUserRoles
表中的角色信息,还是仅包含AspNetUserClaims
表中的角色信息User.IsInRole()
会同时检查AspNetUserRoles
表和AspNetUserClaims
表吗AspNetUserRoles
表迁移到AspNetUserClaims
表AspNetUserClaims
表中
当用户登录时,将创建一个具有标识的cookie。标识包含用户拥有的所有声明。这里声明的是作为有效负载添加到cookie中的键值对。Cookie声明包含诸如User.Id
,SecurityStamp
,Username
一些其他与框架相关的内容和。。。AspNetUserRoles
中的角色列表。以及来自AspNetUserClaims
的其他索赔
因此,您试图在声明中添加角色的内容毫无意义。角色将作为声明存在于cookie中-由框架添加
可能我解释得不好-当您调试应用程序时,请分析控制器的用户
属性并查看索赔实体
,然后查看所有索赔的列表。我所有的胡言乱语都会更有意义
要回答第二个问题-User.IsInRole()
不会进入数据库。此方法仅检查cookie中的信息,请参阅:它仅检查cookie是否包含类型为ClaimTypes.Role
的声明以及您尝试检查的角色的名称
第三个问题。。。你还想那样做吗?您可以执行SQL语句,类似于插入到aspnetuserclaims()中,从aspnetUserRoles内部选择并在aspnetUserRoles.roleid=aspnetroles.id上加入aspnetroles
我写了关于cookie中的声明-您将更好地了解这些声明是如何结合在一起的。这非常有帮助,信息丰富!我已经开始通过调试来解决其中的一些问题。非常感谢你!关于问题1,如果我理解您的意思,在注册新用户时,在UserRoles表中注册他的角色就足够了,没有必要在UserClaims表中注册他的角色。对吗?@DovMiller角色是角色,不需要在声明中输入相同的信息。所以你在这里是正确的。