2016-09-30 188 views
0

我拥有公钥证书 我试图解码使用该公钥的JWT,得到的错误像错误数量的参数传递 我知道我必须使用公钥解码,但所有我得到的是证书从开放ssl使用pem证书解码ruby/jwt

我想如果我从公开SSL证书获得公钥,可能会解决问题。 我没试过智威汤逊的OpenSSL之前,可能有人帮助我在此

require 'jwt' 

token='eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJHZXR0eSBTVFMiLCJzdWIiOiIxMjM0In0.nNqF_osgle1sXYvg4pUoU60LopG1ehhZm4ged0RpxID5bchtigyvK9JqS27qTGkJELg62liQPXo_0DkYV7tr3gRcuFFaq9WlmCmEfxF__dVfcDzHp5NThARZQdRzaBsbsAfLvCJHUwm0wiYmDuCXEieMDkl_BVwEXrfCNxXFRv8' 

key = OpenSSL::X509::Certificate.new <<-PEM 
-----BEGIN CERTIFICATE----- 
MIICcDCCAdmgAwIBAgIJAL4W5EhxGIBlMA0GCSqGSIb3DQEBBQUAMFExCzAJBgNVBAYTAlVTMRUw 
EwYDVQQKDAxHZXR0eSBJbWFnZXMxKzApBgNVBAMMImdldHR5aW1hZ2VzLnNlcnZpY2VzLnN0cy5z 
aWduYXR1cmUwHhcNMTEwNjAyMjIxMjMzWhcNMTIwNjAxMjIxMjMzWjBRMQswCQYDVQQGEwJVUzEV 
MBMGA1UECgwMR2V0dHkgSW1hZ2VzMSswKQYDVQQDDCJnZXR0eWltYWdlcy5zZXJ2aWNlcy5zdHMu 
c2lnbmF0dXJlMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCubFZQPFMhI1NtW17ZyyblqV9c 
0SgVCj01x0quIhWaTXVCE9s2Ai9O5CDaj7syV4ItzJ0Ls8ynEjBN3tk2JC1uK93Y3+kCwuOOEo0M 
2j0YV3gSFYrpPUurcWb6ZZhjaxu01zhs+bXnxT29UMoR4ctjjLTUqgdnthPMfa3MDhfARQIDAQAB 
o1AwTjAdBgNVHQ4EFgQU9T4os8xazIB1o0zQtLvGOFqf85gwHwYDVR0jBBgwFoAU9T4os8xazIB1 
o0zQtLvGOFqf85gwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQBtkf1Qlw2F9X9DPp2w 
xv9F+LB2peR9Qgn2YE2y28UcINOea037Zf8zPfC3pZ4aqGc6kHrQkZ/Vke2esOmBvebgdhZhiG71 
Hpu0trgPTwHdO5B18CJ/QEEsDY10CD1dFUCyBEyONJLKCyhHwjYP6iuGotG2L6xB+xf3QHs+aRAI 
/g== 
-----END CERTIFICATE----- 
PEM 


decoded_token = JWT.decode token, key, true, { :algorithm => 'RS512' } 

回答

2

证书具有public_key方法,让你想要的东西:

# Assuming pem contains the pem encoded string 
cert = OpenSSL::X509::Certificate.new(pem) 
key = cert.public_key 

decoded_token = JWT.decode token, key, true, { :algorithm => 'RS512' } 
+0

它的作品,感谢@马特 –