我正在拼命尝试验证来自Azure AD的JWT访问令牌。
引发的错误为JWT::VerificationError (Signature verification raised)
下面是我的完整代码,经过编辑后可以作为脚本运行,因此可以将其复制/粘贴到终端中。它基于Auth0实现。
常量My_Super_Secure_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设置非常相似。
我是否遗漏了什么明显的基本步骤?谢谢
1条答案
按热度按时间vuktfyat1#
我通过以下内容验证了来自Azure的JWT。还可以考虑使用建议的解决方案here