Я создаю веб-сайт в интрасети, и у меня возникают проблемы с аутентификацией. Я хотел бы ограничить доступ для контроллера для пользователей в определенных ролях Active Directory. Если пользователь не входит в указанные роли, он должен перенаправить его на пользовательскую страницу ошибки.
Включена проверка подлинности Windows. Я попробовал следующие решения:
Я создал пользовательскую политику в своем методе ConfigureServices внутри моего Startup.cs:
...
services.AddAuthorization(options =>
{
options.AddPolicy("ADRoleOnly", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireRole(Configuration["SecuritySettings:ADGroup"], Configuration["SecuritySettings:AdminGroup"]);
});
});
services.AddAuthentication(IISDefaults.AuthenticationScheme);
....
внутри моего appsettings.json моих активных групп каталогов (нетот, который я действительно использую, конечно):
"SecuritySettings": {
"ADGroup": "MyDomain\\MyADGroup",
"AdminGroup": "MyDomain\\MyAdminGroup"
}}
и внутри моего метода настройки:
...
app.UseAuthorization();
app.UseAuthentication();
app.UseStatusCodePagesWithReExecute("/Home/ErrorCode/{0}");
...
У меня есть следующий контроллер:
[Area("CRUD")]
[Authorize(Policy = "ADRoleOnly")]
public class MyController : Controller
У меня есть HomeController со следующим методом:
[AllowAnonymous]
public IActionResult ErrorCode(string id)
{
return View();
}
, но когда я отлаживаю свой сайт, этот метод никогда не достигается.
Если я являюсь пользователем одной из указанных ролей в моей политике, все работает должным образом.
Но если я не являюсь членом ролей, меня перенаправляют на страницу навигатора по умолчанию.
Я бы хотел перенаправить на пользовательскую страницу ошибки. Я думал, что это было целью
app.UseStatusCodePagesWithReExecute("/Home/ErrorCode/{0}");