2015-01-26 105 views
0

我有一個Web API,需要執行自定義授權。我使用OAuth憑證和我想我可能會通過實施authorizationManagerWeb API中的自定義授權 - 來自ASP.Net Web API的IClaimsPrincipal用戶(System.Security.Claims.ClaimsPrincipal)

using Microsoft.IdentityModel.Claims; 
using System.Diagnostics; 
using System.Linq; 

public override bool CheckAccess(AuthorizationContext context){ 
    public override bool CheckAccess(AuthorizationContext context) 
    { 
     //authorization code here 
    } 
} 

,當我試圖創建一個AuthorizationContext我沒有正確的主體類型,就會出現問題做額外的檢查。我注意到,從我的Web API調用中,我得到一個用戶,它是一個System.Security.Claims.ClaimsPrincipal,它不能轉換爲新的AuthorizationContext所需的IClaimsPrincipal。

var authorizationContext = new AuthorizationContext(principal, "resource", "action");//System.Security.Claims.ClaimsPrincipal is the wrong type of principal here, but is what user is on Web API call. 

以下錯誤結果當然這:

無法從 'System.Security.Claims.ClaimsPrincipal' 轉換爲 'Microsoft.IdentityModel.Claims.IClaimsPrincipal'

是否有其他的東西比ClaimsAuthorizationManager我應該實施?是否有一種簡單的方法來創建我需要給定的主體類型的上下文對象?

我確實注意到ClaimsAuthorizationManager是在Microsoft.IdentityModel.Claims中,而其他許多Web API的東西都在Microsoft.AspNet.Identity或Microsoft.AspNet.Identity.Core中,這可能是它可能不是正確的事情使用。

回答

0

事實上,我正在走向錯誤的道路,如線索所示。我最終實現System.Web.Http.AuthorizeAttribute與此類似:在註冊方法

using System; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web; 

public class AuthAttribute : System.Web.Http.AuthorizeAttribute 
{ 
    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) 
    { 
     //authorization stuff here 
    } 
} 

,然後在我的WebApiConfig.cs補充說:

config.Filters.Add(new AuthAttribute());