Javascript 如何使用Prisma API生成JWT令牌?
我正在使用GraphQL。我知道有一种方法可以用密钥保护graphql服务器。例如,将密钥指定为: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通过
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)