JwtSecurityTokenHandler.ValidateToken 抛出 StackoverflowException

JwtSecurityTokenHandler.ValidateToken throws StackoverflowException

提问人:AnthonyDa 提问时间:11/8/2023 最后编辑:AnthonyDa 更新时间:11/9/2023 访问量:23

问:

我的 .Net Framework API 有以下配置:

    public void Configuration(IAppBuilder app)
        {
            ...
            app.UseJwtBearerAuthentication(
                new JwtBearerAuthenticationOptions
                {
                    AuthenticationMode = AuthenticationMode.Active,
                    TokenValidationParameters = new TokenValidationParameters()
                    {
                        ValidAudience = apiIdentifier,
                        ValidateIssuer = true,
                        ValidateIssuerSigningKey = true,
                        ValidateLifetime = true,
                        ValidateAudience = true,
                        ValidIssuer = domain,
                        RequireSignedTokens = true,
                        IssuerSigningKeyResolver = (token, securityToken, kid, parameters) => keyResolver.GetSigningKey(kid),
                        SignatureValidator = (token, param) =>
                        {
                            var claims = new JwtSecurityTokenHandler().ValidateToken(token, param, out var securitytoken);
                            return securitytoken;
                        }
                    }
                });
           ...
        }

我最初的问题是没有检查令牌的签名,所以我可以调整它或伪造令牌,并且它通过 API 没有任何问题。 我试图添加上面的签名验证器,但它生成了堆栈溢出异常。

有什么想法吗?

JWT 持有者令牌 net-4.8

评论

0赞 Lajos Arpad 11/9/2023
您的代码所属的方法的名称是什么?
0赞 AnthonyDa 11/9/2023
编辑了问题
0赞 Lajos Arpad 11/9/2023
谢谢!你有没有弄清楚当应用程序吓坏了时调用了哪些方法?
0赞 AnthonyDa 11/10/2023
我认为 ValidateToken 方法再次调用 SignatureValidator,它会进入递归调用链。
0赞 Lajos Arpad 11/10/2023
我认为你需要通过实验来找出这一点。每次调用您怀疑的方法时,您都可以增加一个计数器(数值字段),并在达到异常时引发异常,例如 30。如果你得到这样的例外,那么你的理论被证明是正确的。

答: 暂无答案