簡體   English   中英

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

[英]How to generate the JWT token using Prisma API?

我正在使用Prisma來處理 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
  }

來源: https : //github.com/prisma/prisma/blob/master/cli/packages/prisma-yml/src/PrismaDefinition.ts

有關結構的更多信息:

服務令牌遵循 JSON Web 令牌 (JWT) 規范 (RFC 7519):

“JSON 網絡令牌 (JWT) 是一種緊湊的、URL 安全的表示要在兩方之間傳輸的聲明的方法。JWT 中的聲明被編碼為 JSON 對象,該對象用作 JSON 網絡簽名 (JWS) 的有效負載結構或作為 JSON Web 加密 (JWE) 結構的明文,使聲明能夠通過消息身份驗證代碼 (MAC) 進行數字簽名或完整性保護和/或加密。”

JWT 具有以下三個組件:

標頭:標頭通常由兩部分組成:令牌的類型,即 JWT,以及所使用的哈希算法(在 Prisma 服務令牌的情況下為 HS256)。

{   "alg": "HS256",   "typ": "JWT" } 

有效載荷:有效載荷包含聲明。 聲明是關於實體(通常是用戶)和附加數據的聲明。 下面是部署到開發階段的名為 demo 的服務的樣子:

{   
   "data": {
      "service": "demo@dev",
      "roles": ["admin"]   
   },   
   "iat": 1532530208,   
   "exp": 1533135008 
} 

簽名:簽名用於驗證消息在此過程中沒有更改。 要創建簽名部分,您必須獲取編碼的標頭、編碼的有效載荷、秘密、標頭中指定的算法,並對其進行簽名。 例如,如果要使用 HMAC SHA256 算法,則簽名將通過以下方式創建:

HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret) 

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

來源: https : //www.prisma.io/docs/prisma-server/authentication-and-security-kke4/#service-token

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM