具有多个身份验证过滤器的ASP.net Web API 2控制器
多个身份验证筛选器的预期语义是什么?这是允许的吗?如果是这样,他们如何一起工作?
这是一个具体的例子.假设我有一个控制器类,如 [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自定义逻辑. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.Net:为什么我的按钮的点击/命令事件没有在转发器中绑定
- ASP.NET System.OutOfMemoryException
- asp.net – 转发器内的复选框,如何在检查更改功能中获取命令
- asp.net – Global.asax没有为Release版本触发
- ASP.NET没有魔法——ASP.NET Identity与授权
- asp.net – 如何使用MVC 4和View Models(强类型)渲染一组复
- ASP.Net机器密钥,验证密钥和解密密钥 – 密钥长度
- asp.net-mvc – 在ASP.NET MVC中创建模型
- asp.net-mvc – 如何让routelink返回正确的URL?
- asp.net-mvc – ASP.NET MVC 3 – 这个布尔值如何在控制器中
- asp.net-mvc-4 – 用于继承类型的WebApi模型绑定
- asp.net-mvc-4 – MVC 4 – Web Api和JSON?
- asp.net-mvc – 读取同一域上不同主机写的cookie
- asp.net – 断点当前不会被命中 – 没有可执行代
- ASP.NET网站在部署时看起来不一样
- 打造自己的.NET Core项目模板
- asp.net – 将.NET Framework 3.5迁移到4.5时出错
- asp.net – web.config文件中的自定义错误页面未
- asp.net – 如何在MVC4中扩展内容协商行为?
- asp.net-web-api – Ninject 3 – BeginBlock()是