ClaimsAuthenticationManager与IAuthenticationFilter与OWIN表单身份验证的区别

15

.NET 4.5、MVC 5:自从上次接触我的网站身份验证功能以来,ClaimsAuthenticationManager、IAuthenticationFilter、OWIN Forms Authentication和ClaimsPrincipals都是新的。我发现所有文档都缺乏明确指出“这个”或“那个”是正确的方式。我甚至无法确定哪些功能是相互排斥的。

这份文件说旧的ASP.NET FormsAuthenticationModule不支持Claims,但新的OWIN不支持无cookie。然而,我感觉OWIN是未来的特性?

  1. 产品路线图是否表明哪种方法是Web应用程序的未来方向?
  2. ClaimsAuthenticationManager是否与OWIN Forms Authentication对于Web应用程序是同义词?
  3. ClaimsAuthenticationManager和全局IAuthenticationFilter是否互斥?

走向正确方向的推动将不胜感激,我的大脑在这个问题上被烤焦了。


2
好问题!对于这道水果沙拉还没有配方。+1 - Cristian E.
在我看来,我们可以使用OWIN启用多种身份验证模式。所有的都是基于声明的,我们可以将任何身份验证机制作为中间件插入到OWIN管道中。但对于Web应用程序而言,OWIN作为托管平台还不够独立,有一个名为“Helios”的项目来处理这个问题。我也在等待下一步的发展,因为目前尚不清楚OWIN是否是未来正确的方向。 - Saravanan
我不相信微软会再次支持无cookie身份验证会话,因为它们本质上不够安全。http://blogs.msdn.com/b/rickandy/archive/2012/03/23/securing-your-asp-net-mvc-4-app-and-the-new-allowanonymous-attribute.aspx - 0leg
0leg:你可能需要证明无 cookie 是固有的不安全。通过“固有”,你是在说“即使假设一个理想的实现”,我想不出任何理由。例如,cookie 与其他参数一样随每个请求传输。我唯一能想到的风险是,如果 URL 对话框的可见区域中存在所有关键材料,则视频监视可能允许重放攻击。此外,要求使用 cookie 也有其自身的风险。 - shannon
2个回答

6

IAuthenticationFilter

在MVC中,IAuthorizationFilter通常用于执行自定义身份验证。使用该过滤器的原因在于应用程序具有两个授权规范和一个身份验证规范的情况下。两种选择 - 将身份验证规范添加到单个任意授权例程中,或将这三个规范全部创建为不同的IAuthorizationFilter - 都意味着我们不能确保首先进行身份验证。

IAuthenticationFilter最初添加到MVC程序集中以解决此问题,然后被重定位以供WebAPI使用。可以在这里找到一篇相关文章; ASP.NET Web API Security Filters

严格来说,IAuthenticationFilter和OWIN身份验证并不是互斥的,但OWIN身份验证将首先发生,并可能妨碍同时使用两者的任何意图。

OWIN Forms身份验证

OWIN表单身份验证是一个令人困惑的短语,我从阅读一篇措辞不当的文章(上面链接的文章)中得到了这个短语。它代表两个非依赖解决方案组件:

“解决方案”的“表单”方面仍然与以前的表单身份验证相同。它是授权失败的结果(例如由[Authorize]属性或web.config <authorization>元素引起的),并配对重定向到登录处理程序表单。(您选择的技术将确定在哪里配置该重定向URL。对于OWIN,您将在CookieAuthenticationOptions中进行配置。)
“OWIN”方面更与我的OP引起的混淆相关。我不会广泛地介绍OWIN,因为它的目的不仅仅是身份验证;通过OWIN完全分离ASP.NET和IIS(通过OWIN),它会产生许多优缺点,但MVC6仅建立在OWIN上,因此它是永久的。
特别针对身份验证,像ASP.NET外部身份验证提供程序(Facebook/Google社交登录)这样的当前模块依赖于OWIN。如果您按照“正常”的方式编写ASP.NET web身份验证,则将使用OWIN。这对通过OWIN进行身份验证是有益的。

以前,社交登录是通过重定向和称为OAuthWebSecurityMessageHandler来实现的。 OWIN提供了一种机制,既可以重定向,又可以处理身份验证提供程序回调;有关更多信息,请阅读Creating Custom OAuth Middleware for MVC 5

ClaimsAuthenticationManager

ClaimsAuthenticationManager并不像它听起来的那样。它实际上是Windows Identity Foundation(WIF)已经执行的身份验证过程的尾部方面。它旨在转换该过程产生的声明以满足您的自定义需求。例如,Claims列表可能包括用户名,您可以从数据库中查找频繁访问的角色或权限,并将这些添加到Claims列表以提高性能。

它适用于使用WIF的任何地方。相对于当前的ASP.NET Web应用程序,这将意味着OWIN。

摘要

没错。在现代ASP.NET Web应用程序中,您可能会使用OWIN、WIF和cookies。如果您使用“盒装材料”,则需要接受这一点,以及WebForms和VB.NET在此版本中的死亡。

因此,既然您可能会进行OWIN身份验证,这里有一系列关于该主题的优秀文章; 这个OWIN是什么?


1
我不在圈内,请问为什么会有“vb.net在这个版本中死亡”的说法? - masteroleary

3

OWIN更多地是在最小化服务Web页面的堆栈方面具有更宏大的范围,而最小化堆栈是未来的新浪潮(就像node.js)。所提到的"OWIN身份验证中间件",Brock Allen在这里表述得最好:

http://brockallen.com/2013/10/24/a-primer-on-owin-cookie-authentication-middleware-for-the-asp-net-developer/

使用.NET 4.5.1对于ASP.NET应用程序,处理“单个用户帐户”(以及Visual Studio 2013中的模板)的所有基础代码都是新的。这意味着对于基于cookie的身份验证,我们不再使用Forms身份验证,对于外部身份提供者,我们也不再使用DotNetOpenAuth。

替换品是一个名为OWIN身份验证中间件的框架,它针对OWIN API进行了定位。我不打算在这里说明OWIN(这是一篇关于该主题的好文章),但简而言之,它是Web主机的抽象API。许多框架,如Web API和SignalR(以及其他非Microsoft框架)都编码到此抽象中,因此它们不需要任何特定的Web主机(如IIS)。


我花了将近一年的时间才意识到,这实际上是对我的问题的回答,没有更多的明确性可以期望。不幸的是,它并没有真正回答我当时在脑海中的问题。最近,我有一个相关的问题(http://stackoverflow.com/questions/29349316/where-to-filter-identity-2-0-claim-ticket-in-a-webapi-app),带着一个过期的赏金,这最终迫使我进入并理解这些组件。我很快就会在这里添加一个答案,因为看起来其他人也对这个问题感到困惑,也许和我当时一样。 - shannon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接