我已经按照我可以找到的教程和堆栈溢出问题进行操作,但仍然存在一个问题,即我在使用 [Authorize] 属性装饰的方法上收到 403 Forbidden。这是一种有效的方法,可以证明 Google Chrome 在调试期间将我的 Windows 凭据传递给在 IISExpress 中运行的站点。public IActionResult Index() { ViewBag.UserIdentityIsAuthenticated = User.Identity.IsAuthenticated; ViewBag.UserIdentityName = User.Identity.Name; ViewBag.UserIsInRoleTechnical = User.IsInRole("ADSecurityGroupOne"); ViewBag.UserIsInRoleTechnicalPeople = User.IsInRole("ADSecurityGroupOneTwo"); return View(); }这是一种因 403 而失败的方法,它只应该显示视图,它还没有链接到任何数据库。 [Authorize(Policy = "AllowedOnly")] [HttpPost] [ValidateAntiForgeryToken] public IActionResult Index(AccountViewModel model) { if (ModelState.IsValid) { return View(); } else return View(); }这是来自 Startup.cs 的 ConfigureServices 方法public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddOptions(); ApplicationSettings appSettings = new ApplicationSettings(); Configuration.GetSection("ApplicationSettings").Bind(appSettings); services.AddAuthentication(IISDefaults.AuthenticationScheme); services.AddAuthorization(options => options.AddPolicy("AllowedOnly", policy => policy.RequireRole(appSettings.AllowedToMigrate))); }我已经确认 AllowedToMigrate 的值与 appsettings.json 中指定的值相同。{ "ApplicationSettings": { "AllowedToMigrate": "ADSecurityGroupOne,ADSecurityGroupTwo" }, "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }}为什么[Authorize(Policy = "AllowedOnly"]失败?
2 回答
心有法竹
TA贡献1866条经验 获得超5个赞
我认为您需要将AllowedToMigrate
值拆分为组件角色,而不仅仅是将其作为一个字符串提交。
你真正想要实现的是
services.AddAuthorization(options => options.AddPolicy("AllowedOnly", policy => policy.RequireRole("ADSecurityGroupOne", "ADSecurityGroupTwo")));
我不完全确定您将如何从单个配置设置中做到这一点 - 可能是通过创建一个新要求:
https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1
慕的地8271018
TA贡献1796条经验 获得超4个赞
回答我自己的问题,因为我发现我做错了什么:
如果角色不止一个,则必须以字符串数组的形式提供;如果只有一个,则必须以一个字符串的形式提供。我更新了 json 应用程序设置文件和我的 ApplicationSettings 类,以便 AllowedToMigrate 是一个字符串数组。
{
"ApplicationSettings": {
"AllowedToMigrate": [ "ADSecurityGroupOne", "ADSecurityGroupTwo" ]
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}
我还修复了角色名称的拼写错误,这是最初的问题!所以这个故事的寓意是:绝对确保您使用正确拼写的角色名称,并在授权似乎无缘无故错误时始终尝试使用不同的角色。
- 2 回答
- 0 关注
- 235 浏览
添加回答
举报
0/150
提交
取消