asp.net-core - .net 核心身份 2.1 角色授权不起作用
问题描述
在 2.1 之前,我已经多次实施基于角色的身份验证。按照步骤搭建新的 2.1 标识。
我扩展了 IdentityUser 模型以添加其他字段,登录工作正常,新字段出现。
startup.cs 配置服务包含
services.AddDefaultIdentity<AppUser>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
我播种了角色
IdentityRole role = new IdentityRole();
role.Name = "Administrator";
IdentityResult roleResult = roleManager.
CreateAsync(role).Result;
然后创建一个用户并添加到角色
AppUser user = new AppUser();
user.UserName = "Admin";
user.Email = "admin@admin.com";
user.Name = "Administrator";
user.LockoutEnabled = false;
user.EmailConfirmed = true;
IdentityResult result = userManager.CreateAsync(user, "password").Result;
if (result.Succeeded)
{
userManager.AddToRoleAsync(user, "Administrator").Wait();
}
一切都成功了,数据库看起来很好(AspNetUserRoles 有链接)
但是,使用角色装饰控制器将始终返回未授权
[Authorize(Roles = "Administrator")]
[Authorize]
但是,使用(无角色)的简单登录检查将起作用。
我该如何解决这个问题/合并源代码的最简单方法是什么,以便我可以单步执行/调试[Authorize]
标签?
解决方案
怎么修
但是,使用角色装饰控制器将始终返回未授权
[Authorize(Roles = "Administrator")]
这是版本中的一个已知错误2.1
。请参阅此处的问题。
我遵循使用 HaoK 和 C-BERBER 建议的旧 api 的建议,它现在可以完美运行。
这是我的DbContext
:
public class ApplicationDbContext : IdentityDbContext<AppUser,IdentityRole,string>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
使用旧式 api 配置身份:
services.AddIdentity<AppUser, IdentityRole>()
.AddRoleManager<RoleManager<IdentityRole>>()
.AddDefaultUI()
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<ApplicationDbContext>();
最后,注销并重新登录,它现在将按预期工作。
如何调试源代码
我猜你不想调试它AuthorizeAttribe
本身,因为它是在编译时处理的。如果您要调试AuthorizeFilter
,可以按照以下步骤操作:
点击Tools
-> Options
->Debugging
- 内
General
,取消选择在Enable Just My Code
Visual Studio - 选择
Enable Source Link Support
- 在 中
Symbols
,确保选择了Microsoft Symbol Servers
你现在可以调试源代码了。但是,由于过滤器的工作方式,您需要在 MVC 之前设置一个断点。我只是设置了一个虚拟中间件,它将在 MVC 路由器处理程序之前发生:
调试截图AuthorizeFiler
:
推荐阅读
- c# - 在 C# 调度程序上更改访问数据库文件的文件路径导致运行代码时出错的问题
- spring-boot - 从授权步骤重定向时,OAuth2 客户端失败
- angular - 如何在Angular2中获得选择选项
- javascript - 需要一些开发指导,因为我是超级新手,所以非常兴奋地看到
- c# - 如何仅为设置的特定状态代码设置 Polly Retry
- android - 如何使用户只能从 Firebase 实时数据库中删除特定数据
- r - 如何使用栅格找到每个多边形内的平均值并提取但不包括某些值
- amazon-web-services - 使用 AWS Cognito Vuejs
- html - 尽管有内容,但反应 div 标签高度为零,
- mongodb - JMeter 使用 Java BeanShell 将文档保存到 MongoDb:JSR223 脚本采样器中的问题