#.net #azure-active-directory #asp.net-core-webapi #asp.net-core-3.1 #asp.net-authorization
Вопрос:
Я использую следующий код в веб-api NET 5;
services.AddAuthorization(options =gt; { //options.AddPolicy("AdUser", policy =gt; policy.RequireRole(roles)); options.AddPolicy("AdUser", builder =gt; { builder.Requirements.Add(new CheckGroupRequirement()); }); }); public class CheckGroupRequirement : AuthorizationHandlerlt;CheckGroupRequirementgt;, IAuthorizationRequirement { [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "lt;Pendinggt;")] protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CheckGroupRequirement requirement) { var identity = WindowsIdentity.GetCurrent(); var principal = new WindowsPrincipal(identity); var isInGroup = principal.IsInRole("MyADGroupGoesHere"); if (isInGroup) { context.Succeed(requirement); } else { context.Fail(); } return Task.CompletedTask; } }
Я вижу, что Принципал прав, и я вижу, что у Принципала есть ряд претензий, но IsInRole всегда будет возвращать ложь. Я подтвердил, что в моей учетной записи действительно есть группа, которую я использую для проверки, и это группа безопасности, а не группа распространения.
Претензии возвращены, как показано ниже;
IsAuthenticated = истинно
isAnonymous = ложь
Не уверен, что это что-то изменит, но мы используем Azure AD на-prem. У нас также есть службы WCF, которые используют членство в группах ОБЪЯВЛЕНИЙ для авторизации, и они работают.