更新System.IdentityModel.Tokens.Jwt导致IdentityServer3客户端发生重大更改

时间:2016-06-28 15:39:10

标签: c# security identityserver3

希望很容易解决。

微软的System.IdentityModels.Tokens.Jwt软件包昨天在NuGet上从4.0.2.206211351更新为v5.0。不幸的是,这会导致一些“标准”IdentityServer3代码发生重大变化。即从他们的代码示例中提取,所以我想很多开发人员可能会在未来几天看到这个问题。

原始代码

使用v4.0.2.xxxxxx版本的软件包。我有

using System.IdentityModel.Tokens;
命名空间中的

然后在Configuration方法中以:

开头
public void Configuration(IAppBuilder app)
    {
        AntiForgeryConfig.UniqueClaimTypeIdentifier = "sub";

        JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "Cookies"
        });

        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        { ... };

更新后

更新说明行后:

JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();

导致问题。

第一件事是,Class显然已移入System.IdentityModel.Tokens.Jwt命名空间,这个解决方案并不是那么糟糕。

但是,我现在在Object reference required for a non-static field上收到JwtSecurityTokenHandler.InboundClaimTypeMap错误。

我在这里遗漏了一些东西,是否需要另一个图书馆,或者在调用Startup.Configuration()之前发生了什么事需要深入研究?

2 个答案:

答案 0 :(得分:28)

当你去看医生说“当我这样做时总是疼” - 医生会回复“然后停止这样做”;)

v4 - &gt;根据定义,v5是一个重大改变。你需要v5吗?

话虽如此 - 一个简单的智能感知探索会让他们将InboundClaimTypeMap重命名为DefaultInboundClaimTypeMap

为沿途的更多改变做好准备。

答案 1 :(得分:1)

OWIN中的访问令牌验证与system.identitymodel v5不兼容 - 您需要降级到v4 - See issue here