Joh*_*kel 5 .net authentication authorization web-services asp.net-web-api2
多个身份验证筛选器的预期语义是什么?这是允许的吗?如果是这样,他们如何一起工作?
这是一个具体的例子.假设我有一个控制器类,如
[BasicAuthenticator]
[LocalAuthenticator]
[Authorize]
public class TestController : ApiController
{
[AllowAnonymous]
public IHttpActionResult GetProduct(int id)
{
}
// etc. etc
}
Run Code Online (Sandbox Code Playgroud)
其中BasicAuthenticator和LocalAuthenticator实现IAuthenticationFilter.
每个身份验证者都有机会获得成功.如果成功,它将设置为context.Principal具有适当的ClaimsIdentity(name,type和isAuthenticated = true)的新对象.
如果验证者失败怎么办?我认为它应该什么都不做,以便另一个人有机会获得成功.对?
如果两者都成功怎么办?第二次删除由第一个创建的Principal?将两个Principal对象的ClaimsIdentity集合合并在一起会不会更有意义?
如果验证者失败了,它应该什么都不做,正确吗?因为其他身份验证者可能会成功.拥有两个身份验证器的语义是,如果任何一个成功,该操作将运行,正确吗?
我认为Authorize类将查看委托人中的所有ClaimsIdentity,如果任何ClaimsIdentity具有"isAuthenticated = true",那么它将允许控制器操作运行.否则,它将设置status = 401.这似乎是它的工作原理.这是正确的吗?
目的[AllowAnonymous]是禁用所有其他授权过滤器,对吗?控制器(或操作方法)被装饰[AllowAnonymous]然后我假设它应该总是运行,即使身份验证失败.那是对的吗?
Joh*_*kel -3
最后一个成功运行的身份验证过滤器只会破坏主体。当您查看Principal 对象以及附加到它的极其复杂的Claims 集合时,您会认为所有这些复杂性肯定是为了支持多次成功的身份验证!但你错了。只有一个人能够成功。除了满足微软某些架构师的虚荣心之外,没有理由这么复杂。
| 归档时间: |
|
| 查看次数: |
3699 次 |
| 最近记录: |