Пользовательская авторизация на основе Active Directory - PullRequest
0 голосов
/ 01 октября 2018

У меня есть приложение ASP.NET Core, которое должно решить, следует ли возвращать информацию из конечных точек контроллера на основе запрашиваемых групп Active Directory клиента.Я попытался реализовать пользовательскую авторизацию следующим образом:

Startup.cs

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddOptions();
            services.AddSingleton(Configuration);
            services.AddSignalR();
            services.AddAuthorization(options=> {
                options.AddPolicy("RequiredADGroupName", policy=>policy.Requirements.Add(new ActiveDirectoryRequirement("RequiredADGroupName")));
            });

        }

ActiveDirectoryRequirement.cs

public class ActiveDirectoryRequirement: IAuthorizationRequirement
    {
        public string ActiveDirectoryGroupName { get; set; }

        public ActiveDirectoryRequirement(string groupName)
        {
            ActiveDirectoryGroupName = groupName;
        }
    }

ActiveDirectoryHandler.cs

public class ActiveDirectoryHandler: AuthorizationHandler<ActiveDirectoryRequirement>
    {
        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ActiveDirectoryRequirement requirement)
        {
            //authorization logic
        }
    }

это следующий пример того, как я мог бы использовать это разрешение.HomeController.cs

public class HomeController : Controller 
{
[Authorize(Policy = "RequiredADGroupName")]
        public IActionResult Index()
        {
            return View();
        }
}

Когда я запускаю проект, я получаю следующую ошибку:

InvalidOperationException: No authenticationScheme was specified, and there was no DefaultForbidScheme found.

что я делаю не так?

1 Ответ

0 голосов
/ 02 октября 2018

Попробуйте зарегистрироваться IAuthorizationHandler с ActiveDirectoryHandler вроде:

            services.AddAuthorization(options => {
            options.AddPolicy("RequiredADGroupName", policy =>
            {
                policy.Requirements.Add(new ActiveDirectoryRequirement("RequiredADGroupName"));
            });
        });
        services.AddSingleton<IAuthorizationHandler, ActiveDirectoryHandler>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...