gpt4 book ai didi

c# - 带有枚举角色参数的自定义 AuthorizeAttributte 在 ajax 调用中获取空值

转载 作者:太空狗 更新时间:2023-10-29 23:15:26 29 4
gpt4 key购买 nike

我的自定义 AuthorizeAttribute 有问题

public class ExplicitAuthorizeAttribute : AuthorizeAttribute
{
private readonly MembershipUserRole[] _acceptedRoles;

public ExplicitAuthorizeAttribute()
{

}

public ExplicitAuthorizeAttribute(params MembershipUserRole[] acceptedRoles)
{
_acceptedRoles = acceptedRoles;
}

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
//Validation ...
}
}

我是这样使用的:

[ExplicitAuthorize[(MembershipUserRole.Admin, MembershipUserRole.SuperAdmin)]

它非常适合 HttpGet 和 HttpPost 来验证我的 Controller 和方法。

但是当我在 ApiController 中使用它并进行 ajax 调用时,AuthorizeCore 没有运行并且我遇到了安全漏洞。 :/

我的枚举看起来像这样

[Flags]
public enum MembershipUserRole
{
Admin= 1,
SuperAdmin = 2
}

有谁知道为什么我的 AuthorizeCore 没有在这种情况下进行验证?

顺便说一句如果我用

[Authorized(Roles ="Admin, SuperAdmin")]

它可以完美验证,但我想要 Stronly Typed Roles,这就是我使用枚举的原因。

最佳答案

您派生自错误的类:System.Web.Mvc.AuthorizeAttribute而对于 Web API Controller ,您应该派生自 System.Web.Http.AuthorizeAttribute .

不要忘记 ASP.NET MVC 和 ASP.NET Web API 是 2 个完全不同的框架,即使它们共享一些共同的原则和名称,相应的类也位于 2 个完全不同的命名空间中。

因此,您所做的是使用它一无所知的 AuthorizeAttribute 装饰 ASP.NET Web API 操作。

如果您想在 ASP.NET Web API 中进行授权,请确保您从正确的属性派生:

public class ExplicitAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
private readonly MembershipUserRole[] _acceptedRoles;

public ExplicitAuthorizeAttribute()
{

}

public ExplicitAuthorizeAttribute(params MembershipUserRole[] acceptedRoles)
{
_acceptedRoles = acceptedRoles;
}

protected override bool IsAuthorized(HttpActionContext actionContext)
{
//Validation ...
}
}

关于c# - 带有枚举角色参数的自定义 AuthorizeAttributte 在 ajax 调用中获取空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19595641/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com