【问题标题】:TokenValidationParameters no longer working after upgrade to 5.0.0升级到 5.0.0 后,TokenValidationParameters 不再工作
【发布时间】:2023-03-14 16:18:01
【问题描述】:

我有以下代码在我使用时可以正常工作 System.IdentityModel.Tokens.Jwt,版本=4.0.20622.1351

private static void ConfigureAzureAD(IAppBuilder appBuilder)
{
    appBuilder.UseWindowsAzureActiveDirectoryBearerAuthentication(
        new WindowsAzureActiveDirectoryBearerAuthenticationOptions
        {
            Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
            TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
            {
                ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
            }
        });
}

但是,一旦我将此软件包升级到最新的 version 5,它就不再编译抱怨 对类型“TokenValidationParameters”的引用声称它在 System.IdentityModel.Token.Jwt 中定义,但找不到。

此外,如果您尝试以下编译器,则会警告您 Audience 已过时

 private static void ConfigureAzureAD(IAppBuilder appBuilder)
    {
        appBuilder.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            {
                Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                Audience = ConfigurationManager.AppSettings["ida:Audience"]
            });
    }

我再次降级了这个 DLL 并使用了 4.0.20622.1351 版本,它开始编译。

配置 Azure Active Directory 的语法是否发生了变化?

在 Github 上,我找不到使用最新包 5.0.0 的单个项目,并且所有项目都使用以前的包 4.0.20622.1351。谁能使用最新的 System.IdentityModel.Tokens.Jwt 5.0.0 对此有所了解,或者使用最新的软件包将我引导到 Github 上的某个项目?

【问题讨论】:

标签: c# azure azure-web-app-service azure-active-directory


【解决方案1】:

TokenValidationParameters 在程序集中:Microsoft.IdentityModel.Tokens

看起来您正在使用 Katana(asp.net OWIN 产品的第一个版本)。 Katana 不支持 5.0.0。您需要坚持使用 4.x。

最新版本的 asp.net 依赖于 S.IM.xx 和 M.IM.xxx 5.0。 https://github.com/aspnet

【讨论】:

  • 这不是问题的答案。问题很清楚,我正在寻找一些解决方法。我不在乎 TokenValidationParameters 在哪个程序集中。我希望升级软件包时代码能够正常工作。
  • @brent-schmaltz 和 @ezile 我认为你没有抓住重点。 Nuget 报告说 v5.0.0 是对 v4.0.2.x 的升级。但是a)没有指向项目信息的链接以发现changelog.md(大多数包都有这样的链接),b)这不仅仅是一个重大变化;这是一个“如果你想更新这个包,你需要移动你的整个平台”更改,c)你可以将 Nuget 包设置为需要“不晚于版本 X”的依赖项,并且 d)我可以向你介绍System.ObsoleteAttribute装饰?自 1.0 以来,它一直在 .NET 中。在这种情况下真的很有帮助。
  • 我同意,这对微软来说是一个相当大的失败。这显然不是在推动一揽子计划,而是完全不同的范式。不幸的是,他们没有分离命名空间并创建一组单独的类。
  • @MikeDoonsebury 如果您使用带有 Web API 的 OWIN 包,那就是 Katana。不过,这种情况并没有很好的记录。
  • 今天接受的答案应该是 @Nate Barbettini 的,因为发布的 Katana 组件可以与一些小的命名空间更改一起使用 stackoverflow.com/a/45851021/11635IMO
【解决方案2】:

短版:确保使用 4.0 版或更高版本的 Microsoft.Owin 软件包,例如 Microsoft.Owin.Security.Jwt


正如其他答案所述,System.IdentityModel.Tokens.Jwt 从 4.0 版到 5.0 版发生了重大变化。这会导致一些问题,因为像 Microsoft.IdentityModel.Protocols 这样的一些软件包依赖于 5.0 版,而像 Microsoft.Owin.Security.Jwt 这样的旧 Katana/OWIN 软件包仍然被硬编码为依赖于 4.0 版。

好消息是,这是新 Katana 4.0 版本中的being fixed。 4.0 包(例如 JwtCookies)已作为预发布包发布到 NuGet,并将很快作为稳定包提供。

【讨论】:

  • 我们在 nuget.org 上删除了 IdentityModel 5.2.0-preview1 和 Katana 4.0-alpha1。请参阅:nuget.org/packages/Microsoft.Owin.Security.OpenIdConnect/…nuget.org/packages/Microsoft.IdentityModel.Tokens/…
  • @BrentSchmaltz 很好,很高兴看到那些 4.0 包朝着稳定的方向发展!更新了我的答案。
  • @ThomasLevesque 于 2 月 19 日发布
  • 我刚刚提取了 NuGet 上可用的最新版本,但失败了。不知道为什么。我没有选择 4 或 5,只是接受了提供给我的最新(非预发布)。
  • @NitinSingh 您的项目中可能存在一个请求 4.0 版本的包。
【解决方案3】:

我不知道何时或是否会解决此问题,但我希望它会。我已经在Github site 上针对 AAD 扩展和Katana site 发布了这些问题。您可以关注这些网站上的讨论和进展,如果您愿意,可以随时发布您对看到此问题的兴趣。

我无法理解在发布之前这不是一个问题。 “升级到 .Net Core”不是一个合理的解决方案。我的应用在很长一段时间内都没有机会做到这一点,就像大多数重要的项目一样。

【讨论】:

  • 是否有特定原因需要升级到 M.IM 5.0? S.IM 4.x 是支持 Katana 的版本。
  • 这是 Nuget 的道。我喜欢保持我的 Nuget 升级窗口清洁。我在这个项目中添加了很多 Nuget 项目,我正在从事的项目有很多,我不记得“哦,这个项目是一个突破性的升级”。如果你应用它,你会破坏你的应用程序。我认为更好的方法是发布一个单独的 Nuget 项目,而不是作为升级。称它为 5.0 或其他,但不是升级。那会更干净。升级可能会破坏一个项目,但在 5.0 中,我的编码无法修复它。所以它不是升级;它是一种新产品
  • Xhris,我听到了。我们希望将这些包在逻辑上保持在一起,因为它们代表了我们的 IdentityModel for Core 产品。我们正在修复 Katana 以使用 5.x 版本。所以,我几个月后这一切都会消失。
  • @BrentSchmaltz,Katana 修复程序何时可用?
  • @BrentSchmaltz,几个月 :)
【解决方案4】:

所以我今天也遇到了同样的问题。往下看,我想我知道答案了。

简而言之,Katana 项目 (http://katanaproject.codeplex.com/) 的问题是未能遵守 Windows Azure Active Directory IdentityModel Extensions for .Net (https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet) 的当前更改

有关更多详细信息,TokenValidationParameters 存在于 System.IdentityModel.Tokens.Jwt 程序集版本 4.0 中,但已在版本 5.0 中移出。它的新家现在正在组装 Microsoft.IdentityModel.Tokens。

抱歉,我无法提供修复,这是一个设计更改,需要对 Katana 代码库进行大幅重构。

【讨论】:

  • 没错。我们正在努力修复。我们意识到这是一个问题。
【解决方案5】:

Katana 目前不适用于 5.x 版本的 IdentityModel。 https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet

但是,正在努力解决此问题。时间线尚未确定。

【讨论】:

  • 我有这个问题,但没有安装名为“Katana”的包,作者是否愚蠢到将包命名与项目名称不同?如果是这样,需要删除的东西的名称是什么?我怎样才能让它与 5.1 一起使用,因为我认为以旧/过时的方式进行新实现没有任何意义。
  • 似乎有 622 万人下载了这个,而且人们会认为他们的项目也不走运。网上似乎没有任何人使用此更新版本的示例。我可能不得不问这个问题。 :-(
  • Katana 是使用 OWIN 管道的 asp.net 版本的开发名称。它是当前 asp.net Core 的前身。作为实习步骤,IdentityModel 库被修改为支持 Katana。 5.x 版本具有 .Net 标准目标。您不能将它们用于 Katana 的发货版本。 Katana 的更新版本即将发布以解决此问题。
  • 据我所知,我没有使用 Katana。我只是尝试迁移到 dotNet Core,当我发现 EntityFrameworkCore 中我需要的太多东西甚至还没有接近实现时,我就停下来了。
  • @BrentSchmaltz - 这是去年,当时我在另一家公司工作,抱歉,我真的不知道我是否解决了这个问题......
猜你喜欢
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 2012-12-13
相关资源
最近更新 更多