gpt4 book ai didi

c# - AuthorizeAttribute 和 IAuthenticationFilter 的区别

转载 作者:太空狗 更新时间:2023-10-29 21:57:33 25 4
gpt4 key购买 nike

在 ASP.Net Web API 2 (Owin) 中,IAuthenticationFilterAuthorizeAttribute 有什么区别?

目前我已经通过创建自己的 AuthorizeAttribute 来实现我的授权,如下所示:

public class IntegratedAuthorization : AuthorizeAttribute
{
protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
{
bool returnValue = false;

if (actionContext.Request.Headers.Authorization != null)
{
if (actionContext.Request.Headers.Authorization.Scheme != null)
{
if (actionContext.Request.Headers.Authorization.Scheme.ToLower() == "basic")
{
if (actionContext.Request.Headers.Authorization.Parameter != null)
{
// ....
// ....
// ....
}
}
}
}

return returnValue;
}
}

然后我将它添加到我的 HttpConfiguration 中,如下所示:

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

一切正常,但是当我搜索 Internet 时,我发现很多开发人员使用 IAuthenticationFilter,例如本教程:Authentication Filters in ASP.NET Web API 2 .

现在真正的问题是,这两种方法有什么区别?我应该使用什么?

谢谢!

最佳答案

AuthorizeAttribute 是应用程序授权实现的类。您正在遵循正确的方法。

IAuthorizationFilter 是许多过滤器实现的更通用的接口(interface),但它们不一定都提供授权。虽然 MVC 不太关心这种方式,但第 3 方库可以识别应用程序中的授权组件并因此插入应用程序安全性的唯一方式是检查是否继承AuthorizeAttribute。底线是,如果您的授权组件不继承 AuthorizeAttribute,某些第 3 方库可能无法在您的应用程序中正常运行。

由于 AuthorizeAttribute 实现了 IAuthorizationFilter,您仍然可以访问它的所有功能,包括 Farhad 提到的 OnAuthorization 方法。

唯一的缺点是 Microsoft 假设每个应用程序都将通过 AuthorizeAttribute 的这些属性来基于用户和角色。因此,如果您的应用程序不是,您可能需要在实现中隐藏这些属性。

[Obsolete("Not applicable in this class.")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
new public string Roles { get; set; }

[Obsolete("Not applicable in this class.")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
new public string Users { get; set; }

第 3 方需要一个额外的约束来插入您的应用程序安全性 - 如果您覆盖 OnAuthorization(请注意,您不必这样做)成功的授权返回 很重要actionContext.Response 属性的 null 和不成功的授权必须将其设置为非空值(将根据失败采取操作的处理程序)。这是默认实现的工作方式,如果需要自定义它,您应该遵循相同的模式。

关于c# - AuthorizeAttribute 和 IAuthenticationFilter 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28668898/

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