Как сохранить свойство для пользователя с аутентификацией Windows в MVC - PullRequest
0 голосов
/ 15 октября 2018

Мне нужно хранить дополнительные пользовательские свойства для каждого пользователя при использовании проверки подлинности Windows и на основе групп AD.Какой самый простой способ сделать это?

Вот мой код для проверки того, что пользователь принадлежит группе AD, я хотел бы запустить его для каждого пользователя, который входит в систему:

var domain = HttpContext.Current.User.Identity.Name.Split('\\')[0];

        using (var ctx = new PrincipalContext(ContextType.Domain, domain))
        using (var user = UserPrincipal.FindByIdentity(ctx, HttpContext.Current.User.Identity.Name))
        {

            if (user != null)
            {
                var groups = user.GetGroups()
                   .Select(x => x.SamAccountName);


                if (groups.Contains("Special User"))
                   User.IsSpecial = true;
                   //something like this would be ideal

Тогда я хотел бы иметь возможность проверить свойство во всем приложении:

public ActionResult Index()
{
    if(User.IsSpecial)
    {
    ...
    }

}

В основном мне нужно один раз проверить группы AD пользователя, чтобы установить свойство, а затем использовать свойство для измененияповедение страницы.

РЕДАКТИРОВАТЬ:

В соответствии с предложением @Matthijs ниже, я взглянул на проверку подлинности утверждений, но не могу сохранить свои утверждения между запросами.Любые предложения о том, как это сделать?Я добавляю заявку в global.asax и читаю значение в моих контроллерах.

 protected void Application_AuthorizeRequest()
    {
        var claimsPrincipal = User as ClaimsPrincipal;
        var claimsIdentity = User.Identity as ClaimsIdentity;
        if (!claimsPrincipal.Claims.Where(x => x.Type == "Client").Any())
        {
            var domain = User.Identity.Name.Split('\\')[0];

            using (var ctx = new PrincipalContext(ContextType.Domain, domain))
            using (var user = UserPrincipal.FindByIdentity(ctx, HttpContext.Current.User.Identity.Name))
            {
                if (user != null)
                {
                    var groups = user.GetGroups()
                       .Select(x => x.SamAccountName);

                    if (groups.Contains("Special User")
                    {
                        claimsIdentity.AddClaim(new Claim("IsSpecial", "Yes"));
                    }

Контроллер:

 var claimsPrincipal = User as ClaimsPrincipal;
        var isSpecial = claimsPrincipal.Claims.Where(x => x.Type == "IsSpecial").First().Value;

1 Ответ

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

Вы можете использовать Заявки для этого.Документация .NET Core содержит более подробную информацию об использовании заявок.Можно создать свои собственные заявки , например IsSpecial.

Более подробную информацию о претензиях можно найти в этом ответе в StackOverflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...