标签: jwt

如果没有它可以解密,那么签署jwt有什么意义呢

我正在尝试使用jwt,在进行一些研究时,我想到了这个 JWT DECODER,我想我必须输入令牌和我的密钥来解密令牌.

但我很惊讶看到它只需要令牌来解密它.如果没有秘密密钥可以解密,有什么用呢.令牌中的所有用户数据都将向任何人开放.

我错过了什么吗?

我的另一个问题是jwt如何帮助防止MITM

谢谢

security encryption node.js jwt express-jwt

0
推荐指数
1
解决办法
1045
查看次数

从客户端向JWT添加数据

我是使用JWT的新手。我有一个API,该API会生成JWT,以便对客户端进行身份验证以进行进一步的请求。我的JWT具有返回用户ID的属性:

{
  jwt: {
    exp: "2017-12-12 00:00:00",
    data: {
      user_id: 491
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是客户端是否可以解码API生成的JWT并将新属性添加到数据字段中,如下所示:

{
  jwt: {
    exp: "2017-12-12 00:00:00",
    data: {
      user_id: 491,
      status: 1
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果我可以通过将状态字段设置为默认值的API身份验证系统生成JWT,然后客户端可以对其进行更改。

谢谢。

api-design token jwt

0
推荐指数
1
解决办法
2176
查看次数

无法自动加载常量JWTBlacklist,需要使用/home/sourabh/dev/celebration/app/models/jwt_blacklist.rb进行定义(LoadError)

我的user.rb模型包含:

class User < ApplicationRecord

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :confirmable, :lockable, :timeoutable, :omniauthable,
         :jwt_authenticatable, jwt_revocation_strategy: JWTBlacklist

  def send_devise_notification(notification, *args)
    devise_mailer.send(notification, self, *args).deliver_later
  end
end
Run Code Online (Sandbox Code Playgroud)

我正在使用devise-jwt gem登录我的Rails api。

我的JWTBlacklist.rb模型包含:

class JwtBlacklist < ApplicationRecord
  include Devise::JWT::RevocationStrategies::Blacklist

  self.table_name = 'jwt_blacklist'
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise jwt

0
推荐指数
1
解决办法
1140
查看次数

从jsonwebtoken提取到期日期时间

据我所知,要使令牌无效,这是存储令牌的最佳方法,它是数据库的到期日期时间。要验证它,您只需从数据库中选择它,如果它存在,就知道它已失效。此外,您可以在数据库的过期日期时间之前删除每个过期的令牌。

因此,我创建了一个中间件,该中间件从授权标头中提取令牌,并将该令牌和到期日期时间附加到该request对象。signOut路由使令牌失效需要日期时间。

  async use(req: any, res: Response, next: NextFunction) {
    try {
      const headers: IncomingHttpHeaders = req.headers;
      const authorization: string = headers.authorization;
      const bearerToken: string[] = authorization.split(' ');
      const token: string = bearerToken[1];

      if (await this.authenticationsRepository.findByEncodedToken(token)) { // invalidated token?
        throw new Error(); // jump to catch
      }

      req.tokenPayload = verifyToken(token); // calls jwt.verify with secret
      next();
    } catch (error) {
      throw new UnauthorizedException();
    }
  }
Run Code Online (Sandbox Code Playgroud)

但是,如何exp从令牌中提取属性以计算到期日期时间呢?

javascript node.js jwt nestjs

0
推荐指数
1
解决办法
59
查看次数

如何从NodeJS中的JSONObject获取值?

我有一个节点 js 应用程序。我使用 JSON Web 令牌进行身份验证。我将我的令牌分成 3 个部分(标头、有效负载、签名)以将它们用于特定代码。

我的有效负载 JSON 对象如下所示:

 payload= {"email": "minnela@gmail.com", "iat" : "23254324", "exp": "4323456"}
Run Code Online (Sandbox Code Playgroud)

我需要获取“电子邮件”的值。如何在 Node.js 中获取它?

javascript authentication rest node.js jwt

0
推荐指数
1
解决办法
125
查看次数

@nestjs/jwt - 无法读取未定义的属性“挑战”

jwt在我的nestjs应用程序中使用令牌,但是当我运行我的项目并使用@UseGuards(AuthGuard())装饰器调用控制器时,应用程序调试返回以下错误:

Cannot read property 'challenge' of undefined
Run Code Online (Sandbox Code Playgroud)

jwt nestjs

0
推荐指数
2
解决办法
1393
查看次数

即使指定了 JWT 身份验证,也未指定任何身份验证方案错误

我是 AzureAD 身份验证的新手。我在 startup.cs 中使用以下设置设置了我的 Web API

        services.AddAuthentication(sharedopt => sharedopt.DefaultScheme = JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer("AzureAd", options =>
        {
            options.Audience = Configuration.GetValue<string>("AzureAd:Audience");
            options.Authority = Configuration.GetValue<string>("AzureAd:Instance")
            + Configuration.GetValue<string>("AzureAd:TenantId");
            options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
            {
                ValidIssuer = Configuration.GetValue<string>("AzureAd:Issuer"),
                ValidAudience = Configuration.GetValue<string>("AzureAd:Audience")
            };

        });
Run Code Online (Sandbox Code Playgroud)

我希望我的客户端应用程序 (Angular) 将在其请求中附加 Authorization 标头,因此它可以访问 API

但是当我执行 Web API 并尝试使用授权打开任何 API 时,它会触发此错误

InvalidOperationException: 未指定 authenticationScheme,也未找到 DefaultChallengeScheme。可以使用 AddAuthentication(string defaultScheme) 或 AddAuthentication(Action configureOptions) 设置默认方案。

我已经指定了 JWTBearerDefaults.AuthenticationScheme。仍然为什么它不接受?

c# jwt asp.net-web-api azure-active-directory .net-core

0
推荐指数
1
解决办法
1万
查看次数

不能去下一个中间件——NodeJS

我正在使用expressrouter来创建一个具有公共和私有路由的服务器。要访问私有路由,用户必须登录并发送JWT令牌。令牌很好,但我无法将用户重定向到私有路由。

const express = require('express');
const jwt = require('jsonwebtoken');

const authRouter = require('./auth');
const usersRouter = require('./users');

const router = express.Router();

router.use(authRouter);

const accessTokenSecret = '4-8-15-16-23-42';
const privateRoutes = ['/user'];

const checkPublicOrPrivate = (req, res, next) => {
  privateRoutes.forEach(route => {
    if (req.path.includes(route)) {
      return authorization(req, res, next);
    }
  });

  return next();
};

const authorization = (req, res, next) => {
  const { token } = req.headers;
  if (token) {
    jwt.verify(token, accessTokenSecret, (err, user) …
Run Code Online (Sandbox Code Playgroud)

javascript middleware node.js express jwt

0
推荐指数
1
解决办法
127
查看次数

Pubsub 签署 JWT 令牌以使用错误的密钥进行推送

我正在为我的后端使用以下堆栈:

  1. 云端点
  2. 带有 ESPv2 的 Cloud Run Gateway => 检查 API 密钥并验证 JWT
  3. Cloud Run gRPC 服务器实现
  4. 当兴趣发生变化时,我会在 pubsub 上发布一条消息

现在,附加到该 pubsub 主题,我有一个推送订阅,它使用服务帐户和指定的受众触发 Cloud Run 方法。

设置: 在此处输入图片说明

现在,我需要配置 Cloud Run Gateway 以验证 pubsub 为指定服务帐户生成的 JWT。这是api_config.yaml按照此处的文档完成的:https : //cloud.google.com/pubsub/docs/push#jwt_format

发行者https://accounts.google.com和我在 pubsub 订阅中指定的受众。

authentication:
  providers:
    - id: gcloud
      jwks_uri: https://www.googleapis.com/robot/v1/metadata/x509/875517523825-compute@developer.gserviceaccount.com
      issuer: https://accounts.google.com
      audiences: project.clounrun.admin
  rules:
    - selector: project.v2.Events.*
      requirements:
        - provider_id: gcloud
Run Code Online (Sandbox Code Playgroud)

可以在此处找到此服务帐户的 jwks: https://www.googleapis.com/robot/v1/metadata/x509/SERVICE-ACCOUNT-ID

就我而言: https://www.googleapis.com/robot/v1/metadata/x509/875517523825-compute@developer.gserviceaccount.com

https://cloud.google.com/endpoints/docs/grpc/service-account-authentication#set_up_authentication_in_the_grpc_api_configuration

我已经激活了 ESPv2 的调试日志,这是我在尝试验证 JWT 时得到的信息:

13:07:37.027 request headers complete (end_stream=false):\n\':authority\', …
Run Code Online (Sandbox Code Playgroud)

jwt google-cloud-platform google-cloud-pubsub google-cloud-endpoints-v2 google-cloud-run

0
推荐指数
1
解决办法
433
查看次数

带有授权标头的 Websocket 连接

我正在开发一个实时 websocket 应用程序,其中服务器使用 .Net 核心进行编码,而客户端可以使用多种不同的语言。我决定保护服务器的方式是 JWT,即只接受来自具有有效 JWT 的请求的套接字连接。我可以用 .Net 客户端成功地做到这一点,这是我的代码:

        _client = new WebSocket("ws://localhost:8080/api/SocketDock","",null,new List<KeyValuePair<string, string>>()
        { new KeyValuePair<string, string>(
            "Authorization", "Bearer eyJhbGciOiJIUzI1.....") 
        });
Run Code Online (Sandbox Code Playgroud)

这与 .net 核心客户端 websocket 完美配合。但是,我无法对 Angular 客户端做同样的事情。我以某种方式浏览了几篇文章,最终得到了不可能的答案。然而,在我看来,如果协议或握手在一种语言中是可能的,那么在其他语言中也必须是可能的。

有人可以指导我以正确的方式与任何 Angular 客户端实现相同的目标吗?

header websocket jwt angular

0
推荐指数
1
解决办法
7627
查看次数