Мне нужно хранить дополнительные пользовательские свойства для каждого пользователя при использовании проверки подлинности 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;