C# 从角色授权更改为索赔授权

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")); 但

我有一个webforms应用程序,它是用ASP.NET成员身份构建的。我成功地迁移到身份

我现在想使用声明授权而不是角色授权,但旧用户的角色信息已迁移到数据库中的
AspNetUserRoles
表中,但
AspNetUserClaims
表为空。迁移后注册的新用户,我可以使用以下代码添加到
AspNetUserClaims

IdentityResult result1 = manager.AddClaim(user.Id, new Claim(ClaimTypes.Role, "role"));
但是老用户只在
AspNetUserRoles
表中注册,而不在
AspNetUserClaims
表中注册

  • 登录时,创建的声明是否也包含
    AspNetUserRoles
    表中的角色信息,还是仅包含
    AspNetUserClaims
    表中的角色信息

  • User.IsInRole()
    会同时检查
    AspNetUserRoles
    表和
    AspNetUserClaims
    表吗

  • 如何将信息从
    AspNetUserRoles
    表迁移到
    AspNetUserClaims

  • 不要沉迷于“索赔”这个术语。这是一种将信息添加到cookie中的方便方法

    这里实际上有两种类型的“声明”——一种添加到cookie中,另一种保存在
    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角色是角色,不需要在声明中输入相同的信息。所以你在这里是正确的。