【问题标题】:MissingMethodException when authenticating with OAuth after upgrading to ASP.NET Core 3升级到 ASP.NET Core 3 后使用 OAuth 进行身份验证时出现 MissingMethodException
【发布时间】:2019-11-22 23:08:16
【问题描述】:

我正在尝试将我的 ASP.NET Core 应用程序从 2.2 升级到 3.0。它使用 OAuth 通过第三方 API 进行身份验证。它在本地运行良好,但是当我在我的服务器上运行它时,会生成以下异常:

失败:Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
执行请求时发生未处理的异常。 System.Exception:处理远程登录时遇到错误。
---> System.MissingMethodException:找不到方法:'Newtonsoft.Json.Linq.JObject > Microsoft.AspNetCore.Authentication.OAuth.OAuthTokenResponse.get_Response()'。

我不确定如何调试它,或者在这里提供什么其他有用的信息。有没有人知道如何找出问题所在?

【问题讨论】:

  • 你检查过this吗?
  • 我认为这与我看到的问题不同。我在 Docker 容器中运行我的应用程序(使用官方图像 mcr.microsoft.com/dotnet/core/aspnet:3.0),所以我不希望有任何旧版本的程序集被加载。

标签: asp.net-core .net-core oauth


【解决方案1】:

身份验证发生在类库中,它仍然引用Microsoft.AspNetCore.Authentication.OAuthMicrosoft.AspNetCore.Authentication.Cookies。 2.2 版。我得到的错误是因为在 .NET Core 3 中,OAuthTokenResponse.Response 被更改为使用 System.Text.Json 而不是 Newtonsoft。我猜在我的开发机器上,它加载了旧版本的Microsoft.AspNetCore.Authentication.OAuth,而在我的生产环境中它正在加载新版本。

很遗憾,Microsoft.AspNetCore.Authentication.OAuth 的最新版本不能作为单独的包提供(至少在撰写本文时)。为了使用它,我必须对我的类库进行以下更改:

  • 将其更改为目标netcoreapp3.0 而不是netstandard2.0
  • 删除对Microsoft.AspNetCore.Authentication.OAuthMicrosoft.AspNetCore.Authentication.Cookies 的引用
  • FrameworkReference 添加到Microsoft.AspNetCore.App

在我做出这些更改后,身份验证再次在生产中为我工作。

【讨论】:

    【解决方案2】:

    在我的情况下,我需要谷歌和微软服务帐户(在 dot net core 3.0 中):

    1. 删除(或卸载)Microsoft.AspNetCore.Authentication.OAuth Nuget 包
    2. 添加(或安装)OAuth2 Nuget 包
    3. 添加 Microsoft.AspNetCore.Authentication.Google Nuget 包
    4. 添加 Microsoft.AspNetCore.Authentication.MicrosoftAccount Nuget 包

    它现在正在工作。

    【讨论】:

      猜你喜欢
      • 2020-01-25
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 2018-05-02
      • 2018-02-18
      • 2021-04-20
      • 2014-08-27
      • 2017-01-29
      相关资源
      最近更新 更多