[我想验证来自目前使用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没有?
让我们尝试一下此代码,更多详细信息请访问此页面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'
};
};