net основной 2.2 проект. Я реализую авторизацию на основе групп для моего API. Я следовал https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/886f2ad2bf6add922c7998fb592e3d4088f9cf4e/5-WebApp-AuthZ/5-2-Groups, чтобы реализовать это. Сначала я добавил https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/886f2ad2bf6add922c7998fb592e3d4088f9cf4e/Microsoft.Identity.Web в свой проект. Затем я начал добавлять политику в мой файл startup.cs, как показано ниже.
services.AddAuthorization(options =>
{
options.AddPolicy("GroupsCheck", policy =>
policy.Requirements.Add(new GroupsCheckRequirement("2a39995a-8fd1-410e-99e2-11cf6046090d")));
});
services.AddScoped<IAuthorizationHandler, GroupsCheckHandler>();
Затем я добавил GroupsCheckHandler.cs
public class GroupsCheckHandler : AuthorizationHandler<GroupsCheckRequirement>
{
private readonly ITokenAcquisition tokenAcquisition;
private readonly IMSGraphService graphService;
public GroupsCheckHandler(ITokenAcquisition tokenAcquisition, IMSGraphService MSGraphService)
{
this.tokenAcquisition = tokenAcquisition;
this.graphService = MSGraphService;
}
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context,
GroupsCheckRequirement requirement)
{
string accessToken = await tokenAcquisition.GetAccessTokenOnBehalfOfUserAsync(new[] { Constants.ScopeUserRead, Constants.ScopeDirectoryReadAll });
User me = await graphService.GetMeAsync(accessToken);
IList<Group> groups = await graphService.GetMyMemberOfGroupsAsync(accessToken);
var result = false;
foreach (var group in groups)
{
if (requirement.groups.Equals(group.Id))
{
result = true;
}
}
if (result)
{
context.Succeed(requirement);
}
}
}
Затем я добавил атрибут авторизации в api, как показано ниже.
[Authorize(Policy = "GroupsCheck")]
[Route("api/[controller]")]
[ApiController]
Теперь, когда я пытаюсь получить доступ к любому API, я получаю исключение ниже.
System.InvalidOperationException: Unable to resolve service for type 'Microsoft.Identity.Web.ITokenAcquisition' while attempting to activate 'LocationServicesAPI.Services.GroupsRequirements.GroupsCheckHandler'.
Может ли кто-нибудь помочь мне выяснить, что может быть причиной root этой проблемы или Если Я сделал это неправильно или какие-либо конфигурации отсутствуют, может кто-то помочь мне в этом отношении. Любая помощь будет принята с благодарностью. Спасибо