我有一个Web API,我需要自定义授权。我正在使用oAuth令牌,我想我可以通过实施authorizationManager来进行额外的检查
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 :(得分:0)
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中添加了Register方法:
config.Filters.Add(new AuthAttribute());