我需要在 ASP.NET MVC5 OWIN 项目中支持混合(Cookie+Basic 或 Cookie+Digest)身份验证。
目标是向任何使用 Cookie 或其他自定义身份验证(通过使用我们的自定义向导)的 Visual Studio 项目轻松添加基本或摘要身份验证。
混合身份验证(即 Cookie+Basic)应按以下方式工作:
- 尝试cookie认证;
- 如果上述失败并出现错误 403(在我们的例子中,如果从 MS Office 应用程序访问资源),而不是“403 未授权”响应发出基本身份验证。
上述也称为混合身份验证配置,我们在 MVC5 / OWIN 之前的 Visual Studio 的早期版本中一直使用自定义 HTTP 模块来实现这一点。
我现在要实施的最简单的解决方案是:
- 从Katana 项目源创建 Microsoft.Owin.Security.Cookies 中间件的副本 ;
- 在 AuthenticationHandler 实现中实现回退到基本(或摘要)身份验证。对于基本身份验证,我将使用Thinktecture.IdentityModel库中的实现。
- 使项目使用新的中间件而不是 cookie 中间件。
不幸的是,微软实现中的很多类都有“内部”访问修饰符,因此我发现自己不得不从微软实现中复制大量代码。
当收到错误 403 时,有什么更好的建议如何实现从 Cookie 到 Basic 或 Digest 身份验证的回退(我需要两种实现)?