【问题标题】:ClaimsAuthenticationManager vs. IAuthenticationFilter vs. OWIN Forms AuthenticationClaimsAuthenticationManager 与 IAuthenticationFilter 与 OWIN 表单身份验证
【发布时间】:2015-04-11 07:14:14
【问题描述】:

.NET 4.5、MVC 5:ClaimsAuthenticationManager、IAuthenticationFilter、OWIN Forms Authentication 和 ClaimsPrincipals 自从我上次接触网站的身份验证功能以来都是新的。我发现在所有说 thisthat 是正确方法的文档中都缺乏明确性。我什至分不清哪些功能是互斥的。

This document 表示旧的 ASP.NET FormsAuthenticationModule 不支持声明,但新的 OWIN 不支持无 cookie。然而,我感觉 OWIN 旨在成为前进的功能?

  1. 产品路线图是否说明哪种方法是网络应用程序的前进方向?
  2. ClaimsAuthenticationManager 是 Web 应用程序的 OWIN 表单身份验证的同义词吗?
  3. ClaimsAuthenticationManager 和全局 IAuthenticationFilter 是否互斥?

我们将不胜感激,我的大脑在这方面受到了煎熬。

【问题讨论】:

  • 好问题!仍然没有这个水果沙拉的食谱。+1
  • 恕我直言,我们可以使用 OWIN 启用多种身份验证模式。所有都是基于声明的,我们可以在 OWIN 管道中插入任何身份验证机制作为中间件。但是对于 Web 应用程序,OWIN 作为一个托管平台还不是独立的,有一个名为 Helios 的项目可以解决这个问题。我也在等待下一步,因为目前尚不清楚 OWIN 是否是正确的前进方式。
  • 我不相信微软会重新支持无 cookie 身份验证会话,因为它们本质上不太安全。 blogs.msdn.com/b/rickandy/archive/2012/03/23/…
  • 0leg:您可能必须支持 cookieless 本质上不太安全的说法。通过“固有地”,您是在说“即使假设一个理想的实现”,我想不出一个原因。例如,cookie 与其他参数一样随每个请求一起传输。我能想到的唯一风险是,如果所有关键材料都出现在 URL 对话框的可见区域中,视频监控可能会允许回放。此外,要求使用 cookie 也有其自身的风险。

标签: asp.net asp.net-mvc authentication asp.net-mvc-5 owin


【解决方案1】:

IAuthenticationFilter

以前在 MVC 中,IAuthorizationFilter 是执行自定义身份验证的常见位置。这个过滤器的原因可以在应用程序有两个授权规范和只有一个身份验证规范的场景中看到。两个选项 - 将身份验证规范添加到单个任意授权例程,并将所有这三个规范创建为不同的 IAuthorizationFilter - 都意味着我们不确保首先进行身份验证。

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

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

OWIN 表单身份验证

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

该解决方案的“表单”方面的运行方式仍与之前的表单身份验证相同。这是授权失败的结果(例如从[Authorize] 属性或web.config <authorization> 元素发生)与重定向到登录处理程序表单配对。 (您选择的技术将决定您配置该重定向 URL 的位置。对于 OWIN,您将在 CookieAuthenticationOptions 中配置它。)

“OWIN”方面与引发我的 OP 的困惑更相关。我不会广泛地详细介绍 OWIN,因为它的功能远不止身份验证。将 ASP.NET 与 IIS 完全解耦(通过 OWIN),它有很多优点和缺点,但 MVC6 是专门基于 OWIN 构建的,所以它会一直存在。

特定于身份验证,ASP.NET 外部身份验证提供程序(Facebook/Google 社交登录)等当前模块依赖于 OWIN。如果您编写 ASP.NET Web 身份验证the "normal" way,您将使用 OWIN。这是通过 OWIN 进行身份验证的好处。

以前,社交登录以更拼凑的方式发生,例如重定向和称为OAuthWebSecurityMessageHandler。 OWIN 提供了一种机制来重定向和处理身份验证提供程序回调;阅读Creating Custom OAuth Middleware for MVC 5了解更多信息。

ClaimsAuthenticationManager

ClaimsAuthenticationManager 并不是它听起来的样子。它实际上是已由 Windows Identity Foundation (WIF) 执行的身份验证过程的尾端。它旨在转换该过程产生的声明以满足您的自定义需求。例如,声明列表可能包含一个用户名,您可以从中查找数据库中经常访问的角色或权限,并出于性能原因将这些添加到声明列表中。

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

总结

是的。您可能会在现代 ASP.NET Web 应用程序中使用 OWIN、WIF 和 cookie。如果您使用“盒装材料”,以及 WebForms 和 VB.NET 在此版本中的消亡,就可以接受。

所以,既然您可能会进行 OWIN 身份验证,那么这里有一个关于该主题的优秀系列; What’s this Owin Stuff About?

【讨论】:

  • 我不在循环中。为什么“此版本中 vb.net 的死亡”?
【解决方案2】:

OWIN 更多的是最小化用于服务网页的堆栈,最小化堆栈是未来的新浪潮(ala 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 的身份验证 我们不再使用表单身份验证和外部身份 提供者我们不再使用 DotNetOpenAuth。

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

【讨论】:

  • 我花了将近一年的时间才意识到这实际上是对我的问题的预期答案,但没有更清楚。不幸的是,它并没有真正回答我当时脑海中的问题。最近,我有一个相关问题 (stackoverflow.com/questions/29349316/…) 的赏金已过期,这最终迫使我进入并了解这些组件。我很快就会在这里添加一个答案,因为看起来其他人也对这个问题感到困惑,也许和我一样。
猜你喜欢
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 2011-03-12
  • 2015-09-23
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多