我有一个使用ASP.NET Membership构建的webforms应用程序.我成功迁移到了身份.
我现在想要使用声明授权而不是Roles授权,但旧用户的角色信息已迁移到AspNetUserRoles
数据库中的表,但该AspNetUserClaims
表为空.迁移后注册的新用户,我可以AspNetUserClaims
使用以下代码添加:
IdentityResult result1 = manager.AddClaim(user.Id, new Claim(ClaimTypes.Role, "role"));
但旧用户只在AspNetUserRoles
表中注册而不在AspNetUserClaims
表中.
在登录时,创建的声明是否也包括AspNetUserRoles
表格中的角色信息,还是仅包括表格中的角色信息AspNetUserClaims
?
请问User.IsInRole()
同时检查AspNetUserRoles
表和AspNetUserClaims
表?
如何将信息从AspNetUserRoles
表格迁移到AspNetUserClaims
表格?
trailmax.. 6
不要迷上"索赔"一词.这是将信息添加到cookie中的便捷方式.
这里实际上有两种类型的"声明" - 一种被添加到cookie中,另一种被保存在AspNetUserClaims
表中.
用户登录时,会创建一个带有标识的cookie.身份包含用户拥有的所有声明.这里声明的是一个键值对,它作为有效负载添加到cookie中.Cookie的要求包含的东西一样User.Id
,SecurityStamp
,Username
一些其他的框架相关的东西...来自角色列表AspNetUserRoles
.以及来自的其他索赔AspNetUserClaims
.
所以你试图将角色添加到声明中 - 没有任何意义.无论如何,角色将在cookie中作为声明 - 由框架添加.
可能我不是很好解释 - 当您调试应用程序时,分析User
控制器的属性并查看ClaimsIdentity
并查看所有声明的列表.我所有的喋喋不休都会更有意义.
回答你的第二个问题 - User.IsInRole()
不进入数据库.此方法仅检查cookie中的信息,请参阅自己的源代码:它仅检查cookie是否包含类型声明,其中包含ClaimTypes.Role
您要检查的角色的名称.
第三个问题......你还想这样做吗?您可以执行类似的SQL语句insert into aspnetuserclaims (
.
我刚才写了一篇关于我博客中的cookie声称的内容- 你会更好地理解它是如何结合在一起的.
不要迷上"索赔"一词.这是将信息添加到cookie中的便捷方式.
这里实际上有两种类型的"声明" - 一种被添加到cookie中,另一种被保存在AspNetUserClaims
表中.
用户登录时,会创建一个带有标识的cookie.身份包含用户拥有的所有声明.这里声明的是一个键值对,它作为有效负载添加到cookie中.Cookie的要求包含的东西一样User.Id
,SecurityStamp
,Username
一些其他的框架相关的东西...来自角色列表AspNetUserRoles
.以及来自的其他索赔AspNetUserClaims
.
所以你试图将角色添加到声明中 - 没有任何意义.无论如何,角色将在cookie中作为声明 - 由框架添加.
可能我不是很好解释 - 当您调试应用程序时,分析User
控制器的属性并查看ClaimsIdentity
并查看所有声明的列表.我所有的喋喋不休都会更有意义.
回答你的第二个问题 - User.IsInRole()
不进入数据库.此方法仅检查cookie中的信息,请参阅自己的源代码:它仅检查cookie是否包含类型声明,其中包含ClaimTypes.Role
您要检查的角色的名称.
第三个问题......你还想这样做吗?您可以执行类似的SQL语句insert into aspnetuserclaims (
.
我刚才写了一篇关于我博客中的cookie声称的内容- 你会更好地理解它是如何结合在一起的.