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 中,而许多其他网络 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.csRegister方法中添加:
config.Filters.Add(new AuthAttribute());
我有一个 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 中,而许多其他网络 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.csRegister方法中添加:
config.Filters.Add(new AuthAttribute());