![](/img/trans.png)
[英]Windows authentication on ASP.NET Core 5 MVC for AD groups
[英]ASP.NET Core 2 - AD Groups not mapping to security roles
我一直在通過 User.Identity.Name 檢索用戶名,但是我需要一種方法來限制通過 Active Directory 中的組訪問某些頁面。
例如,“域管理員”可以查看所有頁面,而“查看用戶”只能查看登錄頁面和其他頁面。
在 Startup.cs 中
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddAuthorization(options =>
{
options.AddPolicy("AdminRoleOnly", policy => policy.RequireRole(Configuration["SecuritySettings:AdminGroup"]));
});
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
配置:
"SecuritySettings": {
"AdminGroup": "MYDOMAIN\\Domain Admins"
}
在我的頁面模型上(我沒有控制器):
[Authorize(Policy = "AdminRoleOnly")]
public class RequestsModel : PageModel
我只是收到一條錯誤消息,說無論如何我都沒有獲得授權
最后我自己寫了一個處理程序(在另一篇文章的幫助下):
public class CheckADGroupHandler : AuthorizationHandler<CheckADGroupRequirement>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
CheckADGroupRequirement requirement)
{
var groups = new List<string>();
var wi = (WindowsIdentity)context.User.Identity;
if (wi.Groups != null)
{
foreach (var group in wi.Groups)
{
try
{
groups.Add(group.Translate(typeof(NTAccount)).ToString());
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
foreach (string policygroup in requirement.GroupName)
{
if (groups.Contains(policygroup))
{
context.Succeed(requirement);
}
}
}
return Task.CompletedTask;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.