我在单元测试失败时遇到很多困难。具体来说,
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
。我无法为自己的一生弄清楚这种情况的发生原因或原因。
我添加了这张图片是为了向您展示我并不疯(或者至少为什么我不认为我疯了)。您可以看到从value
到JObject
的转换失败,就像jobj = null
,并且还可以看到value.GetType()
返回Microsoft.IdentityModel.Json.Linq.JObject
。
StackOverflow能否告诉我为什么会这样,也许我能解决这个问题?
而且,我认为值得注意的是,我引用的是Newtonsoft.Json:
Microsoft决定移植JSON.NET的副本,以便它可以维持信任链。您可以找到其定义的位置:https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pull/1251