ASP.NET MVC尝试加载旧版本的Owin程序集

d_mcg

作为一个背景,我正在开发一个ASP.NET MVC 5应用程序,该应用程序仅在此阶段通过Microsoft的OWIN实现使用基于OAuth的身份验证,用于Facebook和Google。当前(从v3.0.0版本开始,git-commit 4932c2f),FacebookAuthenticationOptionsGoogleOAuth2AuthenticationOptions均未提供任何属性来强制Facebook和Google分别在登录时重新认证用户(通过附加适当的查询字符串参数)。

最初,我着手重写以下类:

  • FacebookAuthenticationOptions
  • GoogleOAuth2AuthenticationOptions
  • FacebookAuthenticationHandler(具体而言AuthenticateCoreAsync()
  • GoogleOAuth2AuthenticationHandler(具体而言AuthenticateCoreAsync()

却发现这些~AuthenticationHandler类被标记为internal

因此,我为Katana项目(http://katanaproject.codeplex.com/提取了源代码的副本,并相应地修改了源代码。

编译后,我发现在MVC项目中有一些需要更新的依赖关系才能使用这些更新的程序集(Microsoft.Owin.Security.FacebookMicrosoft.Owin.Security.Google):

  • 微软
  • 微软安全
  • Microsoft.Owin.Security.Cookies
  • Microsoft.Owin.Security.OAuth
  • Microsoft.Owin.Host.SystemWeb

这是通过将现有项目引用替换为3.0.0版本并更新web.config中的引用来完成的。好消息:项目成功编译。

在调试中,我在启动时收到异常消息:

[MVC Web程序集] .dll中发生类型为'System.IO.FileLoadException'的异常,但未在用户代码中处理

附加信息:无法加载文件或程序集'Microsoft.Owin.Security,版本= 3.0.0.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040)

基本的异常表明Microsoft.AspNet.Identity.Owin试图负载V2.1.0 Microsoft.Owin.Security打电话时app.UseExternalSignInCookie()Startup.ConfigureAuth(IAppBuilder app)在Startup.Auth.cs。

不幸的是,该程序集(及其其他依赖项Microsoft.AspNet.Identity.Owin)不是Project Katana解决方案的一部分,我无法在线找到这些程序集的任何可访问存储库。

Microsoft.AspNet.Identity程序集是否像Katana项目一样是开源的?有没有办法欺骗那些程序集使用引用的v3.0.0程序集而不是v2.1.0?/bin文件夹包含3.0.0版本的Owin程序集。

我已经为Microsoft.AspNet.Identity.Owin升级了NuGet软件包,但这仍然是一个问题。

关于如何解决此问题的任何想法?

d_mcg

我发现,虽然FacebookAuthenticationHandler将其标记为internal,但AuthenticationHandler<TOptions>幸运的是它的抽象基类public最后,我FacebookAuthenticationHandler从Katana项目源代码获取了经过修改的版本,将其重命名并将其包含在我自己的解决方案中,以便它仍然使用2.1库,并且不会引起其他NuGet依赖项的问题。

同样适用于GoogleOAuth2AuthenticationHandler

因此,使用Facebook示例,我的MVC项目中具有以下类定义:

// Overridden to add additional property 'ForceReauthentication'
public class FacebookOAuth2ExtendedOptions : FacebookAuthenticationOptions
...

// Reimplemented v2.1 source with modified method 'ApplyResponseChallengeAsync'
public class FacebookOAuth2CustomHandler : AuthenticationHandler<FacebookOAuth2ExtendedOptions>
...

// Reimplemented v2.1 source, modified to use 'FacebookOAuth2CustomHandler '
public class FacebookOAuth2CustomMiddleware : AuthenticationMiddleware<FacebookOAuth2ExtendedOptions>
...

最后,在Startup类(App_Start / Startup.Auth.cs)中,我使用自定义的中间件类注册了身份验证:

public void ConfigureAuth(IAppBuilder app)
{
    ...

    var fbOptions = new FacebookOAuth2ExtendedOptions()
    {
        AppId = facebookAppKey,
        AppSecret = facebookAppSecret,
        ForceReauthentication = true
    };
    app.Use(typeof(FacebookOAuth2CustomMiddleware), app, fbOptions);

    ...
}

希望这对其他有类似问题的人有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET MVC尝试加载旧版本的Owin程序集

来自分类Dev

ASP.NET MVC / JQuery / Javascript:搜索(并尝试加载)新数据后,视图不会刷新

来自分类Dev

“文件不是以'%PDF-'开头。” 尝试加载PDF时出错-ASP.NET MVC

来自分类Dev

应用程序尝试加载旧版本

来自分类Dev

asp.net动态加载程序集

来自分类Dev

加载asp.net 5程序集

来自分类Dev

ASP.NET MVC 5 + Owin + SimpleInjector

来自分类Dev

Owin自托管&ASP .Net MVC

来自分类Dev

.NET为什么要尝试加载不存在的程序集?

来自分类Dev

在ASP.NET 5中动态加载程序集

来自分类Dev

Asp.Net MVC程序集参考错误

来自分类Dev

ASP .Net VNext和Owin

来自分类Dev

登录时的Ajax加载程序(ASP.NET MVC)

来自分类Dev

ASP .NET Web窗体:无法加载文件或程序集'System.Web.WebPages.Deployment,版本= 2.0.0.0

来自分类Dev

ASP.Net MVC页面加载

来自分类Dev

Model Validation in asp .net MVC

来自分类Dev

ASP.NET MVC,Actionlink

来自分类Dev

ASP.net MVC路由

来自分类Dev

Asp.net Mvc身份

来自分类Dev

ASP.NET MVC入门

来自分类Dev

asp.net Mvc _Layout

来自分类Dev

asp.net 5与asp.net mvc是否不同?

来自分类Dev

ASP.net Web Forms and Asp.net MVC Security

来自分类Dev

Angularjs + ASP.NET MVC + ASP.NET Web API

来自分类Dev

与ASP.NET MVC中的ASP.NET等效

来自分类Dev

与ASP.NET MVC BeginExecuteCore等效的ASP.NET Core

来自分类Dev

OWIN是否还调用MVC(ASP.NET MVC)?

来自分类Dev

ASP.NET MVC 6(ASP.NET Core或ASP.NET5)中的友好URL

来自分类Dev

如何获得旧版本的.NET Standard?