Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Prisma API生成JWT令牌?_Javascript_Reactjs_Graphql_Prisma_Prisma Graphql - Fatal编程技术网

Javascript 如何使用Prisma API生成JWT令牌?

Javascript 如何使用Prisma API生成JWT令牌?,javascript,reactjs,graphql,prisma,prisma-graphql,Javascript,Reactjs,Graphql,Prisma,Prisma Graphql,我正在使用GraphQL。我知道有一种方法可以用密钥保护graphql服务器。例如,将密钥指定为: secret: my-secret-42 在prisma.yml中,然后运行prisma deploy将保护graphql服务器,所有后续查询都需要JWT令牌来访问它 我能够使用命令生成JWT令牌 prisma token 这给了我令牌,在头中传递它时,我能够访问它。但是是否有一个API,我可以使用它生成令牌,而不必在CLI上手动运行prisma token命令 我希望javascript通过

我正在使用GraphQL。我知道有一种方法可以用密钥保护graphql服务器。例如,将密钥指定为:

secret: my-secret-42
在prisma.yml中,然后运行prisma deploy将保护graphql服务器,所有后续查询都需要JWT令牌来访问它

我能够使用命令生成JWT令牌

prisma token
这给了我令牌,在头中传递它时,我能够访问它。但是是否有一个API,我可以使用它生成令牌,而不必在CLI上手动运行prisma token命令


我希望javascript通过查询直接访问GraphQL。为此,我需要某种形式的身份验证。由于将有多个用户使用该应用程序,因此我希望为不同的用户使用不同的令牌。因此,我正在寻找一种方法,如果Prisma可用,我可以使用API生成令牌。

服务令牌是一种简单的JWT令牌,可以通过使用服务和阶段名称以及机密轻松创建。您可以自己创建令牌并附加它。查看prisma CLI使用的实际代码:

  getToken(serviceName: string, stageName: string): string | undefined {
    if (this.secrets) {
      const data = {
        data: {
          service: `${serviceName}@${stageName}`,
          roles: ['admin'],
        },
      }
      return jwt.sign(data, this.secrets[0], {
        expiresIn: '7d',
      })
    }

    return undefined
  }
资料来源:

有关结构的更多信息:

服务令牌遵循JSON Web令牌JWT规范RFC 7519:

JSON Web令牌JWT是一种紧凑、URL安全的表示 在双方之间转让的债权。JWT中的声明如下: 编码为JSON对象,用作JSON Web的有效负载 签名JWS结构或作为JSON Web加密的明文 JWE结构,允许对声明进行数字签名或 使用消息身份验证代码MAC和/或MAC保护完整性 加密的

JWT有以下三个组成部分:

标题:标题通常由两部分组成:标题的类型 令牌,即JWT,以及正在使用的哈希算法,即 对于Prisma服务令牌,为HS256

有效载荷:有效载荷包含声明。索赔是关于 实体通常包括用户和其他数据。这就是它的意思 对于部署到开发阶段的名为demo的服务,看起来像:

签名:签名用于验证邮件是否未更改 一路上。要创建签名部件,您必须使用 编码的报头、编码的有效载荷、秘密、指定的算法 在标题中,并签名。例如,如果您想使用HMAC SHA256算法,签名将按以下方式创建:

因此,JWT通常如下所示:xxxxx.yyyy.zzzzz


来源:

您知道如何使用prisma指定服务名称和阶段名称吗?这是在yml中完成的吗?服务和阶段可以在prisma endpoint环境变量中定义,例如prisma_endpoint=http://localhost:4466/SERVICE/STAGE. 请参阅了解有关Prisma服务端点的更多信息。
{   "alg": "HS256",   "typ": "JWT" } 
{   
   "data": {
      "service": "demo@dev",
      "roles": ["admin"]   
   },   
   "iat": 1532530208,   
   "exp": 1533135008 
} 
HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret)