我的代码为什么实际上应该是Newtonsoft.Json.Linq.JObject时认为值是Microsoft.IdentityModel.Json.Linq.JObject?

问题描述 投票:0回答:1

我在单元测试失败时遇到很多困难。具体来说,

JwtRequestAuthorizeTests.authorize_should_accept_complex_objects_in_request_object()

测试试图将一个Object参数添加到Claims数组,但失败,因为在请求通过管道之后,缺少了一个期望的参数“ someObj”。

为了记录,someObj只是一个定义为:的json对象:

{{
    "foo": {
        "bar": "bar"
    },
    "baz": "baz"
}}

另外,当我从GitHub获取最新的IdentityServer代码时,测试通过。

我发现它失败的原因是因为在方法JwtRequestValidator.ProcessPayloadAsync(JwtSecurityToken token)中,变量value的类型不同于预期的类型。具体来说,代码认为应该在Microsoft.IdentityModel.Json.Linq.JObject时为Newtonsoft.Json.Linq.JObject。我无法为自己的一生弄清楚这种情况的发生原因或原因。

我添加了这张图片是为了向您展示我并不疯(或者至少为什么我不认为我疯了)。您可以看到从valueJObject的转换失败,就像jobj = null,并且还可以看到value.GetType()返回Microsoft.IdentityModel.Json.Linq.JObject

enter image description here

StackOverflow能否告诉我为什么会这样,也许我能解决这个问题?

而且,我认为值得注意的是,我引用的是Newtonsoft.Json:

enter image description here

c# identityserver4
1个回答
0
投票

Microsoft决定移植JSON.NET的副本,以便它可以维持信任链。您可以找到其定义的位置:https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pull/1251

© www.soinside.com 2019 - 2024. All rights reserved.