gpt4 book ai didi

node.js - 如何使用 jwks-rsa 库获取 token 的 key child ( key ID)

转载 作者:行者123 更新时间:2023-12-05 03:59:39 25 4
gpt4 key购买 nike

我有一些 key ID 可用于验证 token ,但它是硬编码的,我不希望它是这样。我正在使用 jwks-rsa 库从 API 端点获取 key 并打开 token 以进行验证,但是获取是在 jwks-rsa 客户端对象的选项属性中完成的,因此我不确定如何去关于将获取的“ child ”值存储在变量中。这很难解释,所以我将展示一些代码。

'use strict'

require('dotenv').config()
const jwt = require('jsonwebtoken')
const jwks = require('jwks-rsa')

const TOKEN_SECRET = 'someweirdtokenstring'

function (request, response, next) {
const client = jwks({
jwksUri: process.env.TOKEN_KEY_PUBLIC //this is the API endpoint; responds with a json key
})
const kid = 'something' //I don't want to hardcode this
client.getSigningKey(kid, (error, key) => {
if (error) throw error
const signingKey = key.publicKey || key.rsaPublicKey
const token = TOKEN_SECRET
if (!token) return response.status(401).send('Access denied')
try {
const verified = jwt.verify(token, signingKey, { algorithms: ['RS256'] })
request.user = verified
next()
} catch (error) {
response.status(400).send({ message: error.message, stack: error.stack })
}
})
}

编辑:这不是 super 干净的代码,但这不是重点。

最佳答案

IMO,您应该在其 header 中创建带有 kid 的 JWT。并仅解码以读取 header 。

这是一个小片段,

'use strict'

require('dotenv').config()
const jwt = require('jsonwebtoken')
const jwks = require('jwks-rsa')

const TOKEN_SECRET = 'someweirdtokenstring'

function (request, response, next) {
const client = jwks({
jwksUri: process.env.TOKEN_KEY_PUBLIC //this is the API endpoint; responds with a json key
})
var decoded = jwt.decode(token, {complete: true});
const kid = decoded.kid
client.getSigningKey(kid, (error, key) => {
if (error) throw error
const signingKey = key.publicKey || key.rsaPublicKey
const token = TOKEN_SECRET
if (!token) return response.status(401).send('Access denied')
try {
const verified = jwt.verify(token, signingKey, { algorithms: ['RS256'] })
request.user = verified
next()
} catch (error) {
response.status(400).send({ message: error.message, stack: error.stack })
}
})
}

关于node.js - 如何使用 jwks-rsa 库获取 token 的 key child ( key ID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56958374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com