如何在DenoJS中验证JWT签名?

问题描述 投票:0回答:1

[我想验证来自目前使用RS256作为签名的Google JWT的签名(来自Google的证书:https://www.googleapis.com/oauth2/v3/certs,并且我能为DenoJS找到的唯一一个库处理HS256(https://deno.land/x/djwt)。

我真的不参与整个密码游戏,也许有人知道我如何验证签名,也许已经有一个例子了?我真的不知道我需要使用SHA-256进行哈希运算还是使用RSA的方式,当我尝试查找如何实现此功能时,我看到了很多技术上的解释,但没有关于如何处理的真正示例。

我通常只在Node上使用Google的脚本包,请参见:https://developers.google.com/identity/sign-in/web/backend-auth

我具有使用SHA-256进行哈希处理的功能,但关于RSA没有?

typescript rsa verification sha deno
1个回答
0
投票

让我们尝试一下此代码,更多详细信息请访问此页面jwt authentication in Deno

import { Context } from "https://deno.land/x/oak/mod.ts";
import users from "./users.ts";
import { makeJwt, setExpiration, Jose, Payload } from "https://deno.land/x/djwt/create.ts"
import key from './key.ts'

const header: Jose = {
  alg: "HS256",
  typ: "JWT",
}

export const login = async (ctx: Context) => {
  const {value} = await ctx.request.body();
  for (const user of users) {
    if (value.username === user.username && value.password === user.password) {
      const payload: Payload = {
        iss: user.username,
        exp: setExpiration(new Date().getTime() + 60000),
      }

      // Create JWT and send it to user
      const jwt = makeJwt({key, header, payload});
      if (jwt) {
        ctx.response.status = 200;
        ctx.response.body = {
          id: user.id,
          username: user.username,
          jwt,
        }
      } else {
        ctx.response.status = 500;
        ctx.response.body = {
          message: 'Internal server error'
        }
      }
      return;
    }
  }

  ctx.response.status = 422;
  ctx.response.body = {
    message: 'Invalid username or password'
  };
};
© www.soinside.com 2019 - 2024. All rights reserved.