【问题标题】:Custom authorization in Web API - IClaimsPrincipal from ASP.Net Web API User (System.Security.Claims.ClaimsPrincipal)Web API 中的自定义授权 - 来自 ASP.Net Web API 用户 (System.Security.Claims.ClaimsPrincipal) 的 IClaimsPrincipal
【发布时间】:2015-01-27 06:40:49
【问题描述】:

我有一个需要进行自定义授权的 Web API。我正在使用 oAuth 令牌,我想我可以通过实现一个授权管理器来做额外的检查

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 中,这可能表明它可能不正确使用的东西。

【问题讨论】:

    标签: c# asp.net asp.net-identity wif


    【解决方案1】:

    事实上,正如线索所示,我走错了路。我最终实现了类似于此的 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());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多