2014-11-06 51 views
1

我正在嘗試探索在OWIN管道中如何向用戶添加其他聲明。 我知道我可以在登錄階段或其他一些地方這樣做,可能在的Application_PostAuthenticate部分,因爲我沒有Login部分(這是一個Windows身份驗證應用程序),但我想知道是否有可能或者甚至更好地在OWIN管道中執行。使用Windows身份驗證在OWIN管道期間添加聲明

我的想法來自於OWIN也有一個PostAuthenticate階段。所以,我想這一點:

app.Use((context, next) => 
{ 
    var user = context.Authentication.User.Identity as ClaimsIdentity; 
    if (user != null) 
    { 
     user.AddClaim(new Claim(ClaimTypes.Role, "Admin")); 
     user.AddClaim(new Claim(ClaimTypes.GivenName, "Mr. Tallmaris")); 
    } 
    return next.Invoke(); 
}); 

有了一個破發點,我可以看到用戶是正確的,而且要求添加,但在我看來,我有這樣的事情:

<ul> 
    @foreach (var claim in ClaimsPrincipal.Current.Claims) 
    { 
     <li>@claim.Type - @claim.Value</li> 
    } 
</ul> 

但是我新增的索賠沒有顯示出來。有任何想法嗎?

我知道在應用程序級別需要添加「一些」聲明(角色來自數據庫和其他東西),但我想探索直接從OWIN管道添加某些聲明。

回答

2

我在asp.net應用程序中使用這個原則將groupsid聲明轉換爲角色聲明。

app.Use((context, func) => { 
    var claimsIdentity = context.Authentication.User.Identity as ClaimsIdentity; 
    if (claimsIdentity != null) { 
    var claimsToAdd = new List<Claim>(); 
    //check if we have any groupsid claims, add these as role claims 
    foreach (var claim in claimsIdentity.Claims) { 
     if (claim.Type == ClaimTypes.GroupSid) { 
     claimsToAdd.Add(new Claim(ClaimTypes.Role, 
      new SecurityIdentifier(claim.Value) 
      .Translate(typeof(NTAccount)).ToString())); 
     } 
    } 
    if (claimsToAdd.Count > 0) { 
     claimsIdentity.AddClaims(claimsToAdd); 
    } 
    } 
    return func.Invoke(); 
}); 

此使用Microsoft.Owin v3.0.0.0

爲我工作
相關問題