繁体   English   中英

Web API中的自定义授权-ASP.Net Web API用户(System.Security.Claims.ClaimsPrincipal)中的IClaimsPrincipal

[英]Custom authorization in Web API - IClaimsPrincipal from ASP.Net Web API User (System.Security.Claims.ClaimsPrincipal)

我有一个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中,这也许是一个提示,可能不是正确的选择。

实际上,线索提示我走错了路。 我最终实现了类似于以下内容的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中的Register方法中添加:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM