加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

具有多个身份验证过滤器的ASP.net Web API 2控制器

发布时间:2020-12-16 07:41:28 所属栏目:asp.Net 来源:网络整理
导读:多个身份验证筛选器的预期语义是什么?这是允许的吗?如果是这样,他们如何一起工作? 这是一个具体的例子.假设我有一个控制器类,如 [BasicAuthenticator][LocalAuthenticator][Authorize]public class TestController : ApiController{ [AllowAnonymous] pub
多个身份验证筛选器的预期语义是什么?这是允许的吗?如果是这样,他们如何一起工作?

这是一个具体的例子.假设我有一个控制器类,如

[BasicAuthenticator]
[LocalAuthenticator]
[Authorize]
public class TestController : ApiController
{
    [AllowAnonymous]
    public IHttpActionResult GetProduct(int id)
    {
    }

    // etc. etc
}

其中BasicAuthenticator和LocalAuthenticator实现IAuthenticationFilter.

每个身份验证者都有机会获得成功.如果成功,则将context.Principal设置为具有适当的ClaimsIdentity(name,type和isAuthenticated = true)的新对象.

如果验证者失败怎么办?我认为它应该什么都不做,以便另一个人有机会获得成功.对?

如果两者都成功怎么办?第二次删除由第一个创建的Principal?将两个Principal对象的ClaimsIdentity集合合并在一起会不会更有意义?

如果验证者失败了,它应该什么都不做,正确吗?因为其他身份验证者可能会成功.拥有两个身份验证器的语义是,如果任何一个成功,该操作将运行,正确吗?

我认为Authorize类将查看委托人中的所有ClaimsIdentity,如果任何ClaimsIdentity具有“isAuthenticated = true”,那么它将允许控制器操作运行.否则,它将设置status = 401.这似乎是它的工作原理.这是正确的吗?

[AllowAnonymous]的目的是禁用所有其他授权过滤器,对吗?控制器(或操作方法)使用[AllowAnonymous]进行修饰,然后我假设它应该始终运行,即使身份验证失败也是如此.那是对的吗?

解决方法

使用Web API 2中引入的最近的身份验证过滤器,我猜一个人应该为身份验证引入一个属性,并且可能有一个属性用于授权,因为MS团队将这两个问题分开.所以语义是有一个用于身份验证.

在我看来,您可以添加多个身份验证属性的事实只是巧合,因为您碰巧通过属性在控制器及其操作上设置过滤器,并且您可以添加多个属性…同样如此在项目范围内设置身份验证过滤器,在所有控制器的所有操作上:因为可以添加多个过滤器,它不一定意味着应该添加多个身份验证过滤器.

如果您需要支持多种身份验证机制(例如基本身份验证和本地身份验证),您可以只使用一个属性/过滤器拦截请求,并尝试这两种机制,实现您可能需要的任何AND / OR自定义逻辑.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读