2012-01-25 36 views
0

目前,我正在執行此操作以修改依賴方的Global.asax中的角色聲明。使用Windows Identity Foundation時,依賴方修改索賠的最佳方法

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成功驗證後的依賴方中的索賠?

+0

做您嘗試使用*** *** ClaimsAuthenticationManager? – Kiquenet

回答

2
+0

所以基本上我將我的代碼從global.asax中的Authenticate移動到CustomModule中的Authenticate。它可以像上面的代碼一樣工作。在ClaimsAuthenticationManager中使用它會帶來什麼真正的區別或好處。我看到的一件事是更好的可管理性,因爲我把它放在單獨的庫中,但即使是常規的HttpModule也是如此。 – gbs

相關問題