我正在拼命尝试验证Azure AD的JWT访问令牌。
引发的错误是 JWT::VerificationError (签名验证错误)
以下是我的代码,完整地编辑为脚本形式,以便可以复制/粘贴到终端中。 它基于Auth0实现。
常量MY_SUPER_SECRET_ACCESS_TOKEN需要设置为Azure AD的访问令牌。
require 'net/http'
require 'uri'
access_token = MY_SUPER_SECRET_ACCESS_TOKEN
jwks_raw = Net::HTTP.get URI('https://login.microsoftonline.com/common/discovery/v2.0/keys')
jwks_hash = Hash[
jwks_keys
.map do |k|
[
k['kid'],
OpenSSL::X509::Certificate.new(
Base64.decode64(k['x5c'].first)
).public_key
]
end
]
token_info = JWT.decode(access_token, nil, false, {algorithm: 'RS256'})
cert_public_key = jwks_hash[token_info[1]['kid']]
JWT.decode(access_token, cert_public_key, true, algorithms: 'RS256')
出现了签名错误?我不是很擅长这方面的知识,我们正在使用与此非常相似的设置的Auth0。
我是否错过了一些显而易见的基本步骤?谢谢。
kid
验证。 - Gianpaolo Scrigna