升级到5.0.0后,TokenValidationParameters不再工作

MHO*_*OOS 54 c# azure azure-web-sites azure-active-directory

我有以下代码,当我使用System.IdentityModel.Tokens.Jwt,Version = 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"]
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

但是,只要我将此软件包升级到版本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"]
            });
    }
Run Code Online (Sandbox Code Playgroud)

我再次降级此DLL并使用版本4.0.20622.1351,它开始编译.

配置Azure Active Directory是否有语法更改?

在Github上,我找不到使用最新软件包5.0.0的单个项目,并且所有软件都使用之前的软件包4.0.20622.1351.任何人都可以使用最新的System.IdentityModel.Tokens.Jwt 5.0.0对此进行说明,或者使用最新的软件包将我引导到Github上的一些项目?

Bre*_*ltz 29

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

  • @ brent-schmaltz和@ezile我认为你错过了这一点.Nuget报告v5.0.0是对v4.0.2.x的升级.但是a)没有链接到项目信息以发现changelog.md(大多数软件包都有这样的链接),b)它不仅仅是一个突破性的变化; 它是"你需要移动你的整个平台,如果你想更新这个包"更改,c)你可以设置Nuget包要求"不迟于版本X"依赖,并且d)我可以向你介绍`System.ObsoleteAttribute`装饰?它从1.0开始就在.NET中.这样的情况真的很有帮助. (20认同)
  • 这不是问题的答案.问题是完全清楚的,我正在寻找一些解决方案.我不关心TokenValidationParameters是哪个程序集.我希望在升级软件包时代码能够正常工作. (9认同)
  • 我同意,这对微软而言是一个相当大的失败.这显然没有带来一揽子计划,而是一个完全不同的范例.不幸的是,他们没有分隔命名空间并创建一组单独的类. (8认同)
  • @MikeDoonsebury如果您正在使用带有Web API的OWIN软件包,那就是Katana.但事实并非如此. (2认同)

Nat*_*ini 16

简短版本:确保使用Microsoft.Owin软件包的4.0或更高版本软件包,例如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版本正在修复此问题.4.0软件包(例如JwtCookies)已作为预发布软件包发布到NuGet,并将很快作为稳定软件包提供.

  • 我们在nuget.org上删除了IdentityModel 5.2.0-preview1和Katana 4.0-alpha1.请参阅:https://www.nuget.org/packages/Microsoft.Owin.Security.OpenIdConnect/4.0.0-alpha1和https://www.nuget.org/packages/Microsoft.IdentityModel.Tokens/5.2.0- preview1-408290725 (4认同)

Chr*_*isW 7

我不知道何时或是否会得到修复,但我希望它会.我已经在Github网站上发布了这些问题,用于AAD扩展和Katana网站.您可以按照这些网站上的讨论和进度进行操作,如果您愿意,可以随时发布您对此问题的兴趣.

我无法理解在发布之前这不是一个问题."升级到.Net Core"不是一个合理的解决方案.我的应用程序暂时没有机会这样做,大多数非平凡的项目也是如此.

  • 这是Nuget的道.我喜欢让我的Nuget升级窗口保持干净.我有很多Nuget项目添加到这个项目中,我工作的项目很多,我不记得了"哦,这个项目是一个突破性的升级." 如果您应用它,您将破坏您的应用程序.我认为更好的方法是发布一个单独的Nuget项目,而不是升级.称之为5.0或其他什么,但不是它升级.那会更清洁.升级可能会破坏项目,但5.0版没有我的编码可以修复它.所以它不是升级; 它是一种新产品 (24认同)

小智 6

所以我今天也遇到同样的问题。向下看它的底部后,我想我知道了答案。

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

有关更多详细信息,System.IdentityModel.Tokens.Jwt程序集版本4.0中提供了TokenValidationParameters,但在版本5.0中已将其移出。它的新主页现在位于程序集Microsoft.IdentityModel.Tokens中。

抱歉,我无法提供修复,这是对设计的更改,需要从其上大量重构Katana代码库。