Каков наилучший способ изменить утверждения на проверяющей стороне при использовании Windows Identity Foundation

В настоящее время я делаю это, чтобы изменить свои претензии ролей в файле Global.asax проверяющей стороны.

void Application_AuthenticateRequest(object sender, EventArgs e) {
 if (Request.IsAuthenticated) {

   string[] roleListArray = Roles.GetRolesForUser(User.Identity.Name);
   IClaimsPrincipal claimsPrincipal = HttpContext.Current.User as IClaimsPrincipal;
   IClaimsIdentity claimsIdentity = (IClaimsIdentity)claimsPrincipal.Identity;
   var roleclaims = claimsIdentity.Claims.FindAll(c => c.ClaimType == ClaimTypes.Role);
   foreach (Claim item in roleclaims)
   {
     claimsIdentity.Claims.Remove(item);
   }

   foreach(string role in roleListArray)
   {
     claimsIdentity.Claims.Add(new Claim(ClaimTypes.Role, role));
   }

   HttpContext.Current.User = claimsPrincipal;

  }
}

Это правильный способ или есть лучший способ изменить утверждение в проверяющей стороне после успешной аутентификации службой STS?


person gbs    schedule 25.01.2012    source источник
comment
Вы пытались использовать ClaimsAuthenticationManager?   -  person Kiquenet    schedule 05.05.2016


Ответы (1)


Используйте ClaimsAuthenticationManager.

Обратитесь к ClaimsAuthenticationManager, ClaimsAuthorizationManager и OriginalIssuer.

person rbrayb    schedule 25.01.2012
comment
Итак, в основном я переместил свой код из Authenticate в global.asax в Authenticate в CustomModule. Он работает как приведенный выше код. Какую реальную разницу или преимущество я получаю, используя его в ClaimsAuthenticationManager. Одна вещь, которую я вижу, это лучшая управляемость, поскольку она у меня есть в отдельной библиотеке, но это будет иметь место даже для обычного HttpModule, верно? - person gbs; 25.01.2012