为了账号安全,请及时绑定邮箱和手机立即绑定

.NET Core 2.1 Windows 身份验证无法识别角色成员身份

.NET Core 2.1 Windows 身份验证无法识别角色成员身份

C#
交互式爱情 2021-11-28 20:07:47
我已经按照我可以找到的教程和堆栈溢出问题进行操作,但仍然存在一个问题,即我在使用 [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


查看完整回答
反对 回复 2021-11-28
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

回答我自己的问题,因为我发现我做错了什么:


如果角色不止一个,则必须以字符串数组的形式提供;如果只有一个,则必须以一个字符串的形式提供。我更新了 json 应用程序设置文件和我的 ApplicationSettings 类,以便 AllowedToMigrate 是一个字符串数组。


{

  "ApplicationSettings": {

    "AllowedToMigrate": [ "ADSecurityGroupOne", "ADSecurityGroupTwo" ]

  },


  "Logging": {

    "IncludeScopes": false,

    "LogLevel": {

      "Default": "Warning"

    }

  }

}

我还修复了角色名称的拼写错误,这是最初的问题!所以这个故事的寓意是:绝对确保您使用正确拼写的角色名称,并在授权似乎无缘无故错误时始终尝试使用不同的角色。


查看完整回答
反对 回复 2021-11-28
  • 2 回答
  • 0 关注
  • 235 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信