2015-01-26 108 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());