当前位置: 首页 > 知识库问答 >
问题:

JWT 令牌未在远程服务器上验证,无法匹配“kid”错误

索曾琪
2023-03-14

我正在使用asp。net核心与openiddict,为了授权,我使用jwtmiddleware

 app.UseJwtBearerAuthentication(new JwtBearerOptions
            {
                AutomaticAuthenticate = true,
                AutomaticChallenge = true,
               RequireHttpsMetadata = false,
               Authority= "http://localhost"
            });

但由于某些原因,它抛出了这个错误,任何帮助都将不胜感激。

info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware[7] Bearer 未经过身份验证.失败html" target="_blank">消息:IDX10501:签名验证失败。无法匹配“孩子”: “7FG4SQ4TIA测试ZDHTLRYPWIEDU_RA1FVG91D”,标记:“{”alg“:”RS256“,”典型值“:”JWT“,”孩子“:”7FG4SQ4TIA测试ZDHTLRYPWIEDU_RA1FVG9 1D“}。{“unique_name”:“asd”,“email”asd“,”Asd“,”AspNet.Identity.SecurityStamp“:”eb93ee4 4-6dbf-41b8-b1d6-157e4aa23ea7“,”jti“:”4f0f5395-e565-4489-8baf-6361d5c4cb94“,”usa ge“:”access_token“,”机密“:true,”scope“:[”offline_access“,”profile“,”emai l“,”roles“],”sub“sub”:“9125d8c5-5739-4f46-8747-e3423a4649”,“azp”:“firebaseApp”,“nb f”:1466997962,“exp”:1466999762,“iat”:1466997962,“iss”:“http://localhost:5000/”}'。warn: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1] 对于筛选器 'Microsoft.AspNetCore.Mvc.A uthorization.授权过滤器'。warn: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1] 对于筛选器 'Microsoft.AspNetCore.Mvc.A uthorization.授权过滤器'。

共有2个答案

范承教
2023-03-14

如果您使用的是第三方 STS(例如,不是身份服务器或 Auth0),则可以使用反向通道处理程序来更轻松地从中间件调试 http 结果:

app.UseJwtBearerAuthentication(new JwtBearerOptions() {
    ...
    BackchannelHttpHandler = new BackChannelHandler()
    ...
}

然后

using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;

namespace Application.API.Utilities
{
    public class BackChannelHandler : HttpMessageHandler
    {
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            HttpClient client = new HttpClient(new HttpClientHandler(), disposeHandler: false);
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            var res = await client.GetAsync(request.RequestUri);
            return res;
        }
    }   
}

在我的例子中,jwks和openid-配置endpoint的默认返回类型是text/html,而不是Application/json。通过在从自定义处理程序发出请求时添加接受标头,一切正常。

查锦程
2023-03-14

>

  • 权限应包含您的OIDC服务器的基地址。您应该指定带有端口的授权URL(在您的情况下为5000,相应于令牌信息中的“iss”声明):

    Authority="http://localhost:5000"
    

    您可以通过设置验证颁发者签名密钥 = false 来禁用颁发机构验证。JwtBearer选项包含属性令牌验证参数,用于聚合有关验证的设置:

    app.UseJwtBearerAuthentication(new JwtBearerOptions
        {
            ...
            TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = false}
        }
    

  •  类似资料:
    • 在服务器上验证令牌的正确方法是什么? 我正在我的应用程序中使用jwt令牌机制,下面是它目前的工作方式: null null

    • 我从spring boot oauth2服务器生成JWT令牌,但当我想使用endpoint验证此JWT令牌时,我将post请求发送到此endpoint,并将JWT包含在授权头中,得到401-未经授权的http错误代码。 我从服务器得到的结果是: 为什么oauth服务器返回401? 下面是我对oauth服务器的实现:

    • 当我重新启动identityserver4客户端应用程序第一次获得异常时,我使用identityserver4处理SSO问题 因此,我将更改为但在重新启动identityserver时仍然会出现错误

    • 问题内容: 我获得了用于Web推送的Firebase Cloud Messaging注册令牌。然后,我将此邮件发送到服务器以保存在数据库中,以供以后推送。但是,如何验证此令牌有效或伪造的? 我已经尝试过了,但是我认为这是针对Auth令牌而不是针对Web推送的。 其他人可以将随机伪造令牌的请求发送到我的服务器。我想防止这种情况,然后再保存到数据库中。 编辑:已解决,我编写了一个简单的类来使用FCM快

    • 我目前正在使用Vapor开发Swift后端。我的iOS客户端使用新的iOS 13功能“使用Apple登录”。当用户登录时,我会得到一个身份令牌(访问令牌),这是一个由Apple签名的有效JWT令牌。这将在所有正在进行的通信中发送到服务器,以验证服务器提供的某些路由。 在服务器上,我想通过验证令牌签名来验证发送的令牌是否确实由Apple签名,并且不是由某些恶意用户专门创建的。Apple提供了一个HT

    • 编辑: 阅读有关bug的讨论:https://github.com/tymondesigns/jwt-auth/issues/83 我原来的问题是: 我正在使用jwt auth my protected resources实现,该资源需要经过身份验证的用户,代码如下: 当用户在API上登录时,将创建一个授权令牌,并将响应授权标头发送到调用资源的客户端应用程序。因此,客户端应用程序在截获任何响应的头