到目前为止,我可以提出的最佳解决方案:
抓斗的证书
(中的第一个值
x5c从任一属性阵列)
https://login.microsoftonline.com/common/discovery/keys或
https://login.microsoftonline.com/common/discovery/v2.0/keys,匹配
kid和
x5t从id_token。
将证书包裹 在
-----BEGIN CERTIFICATE-----n和中
n-----ENDCERTIFICATE-----(换行看起来很重要),然后将结果用作公钥(与https://jwt.io/上的id_token结合使用)。
当然,您的实际用例可能是让某些程序验证传入的JWT
id_tokens,所以您的目标将不是简单地通过https://jwt.io/上的Web UI获取令牌来进行验证。
例如, 在python中 ,我需要这样的东西:
#!/usr/bin/env pythonimport jwtfrom cryptography.x509 import load_pem_x509_certificatefrom cryptography.hazmat.backends import default_backendPEMSTART = "-----BEGIN CERTIFICATE-----n"PEMEND = "n-----END CERTIFICATE-----n"mspubkey = "The value from the x5c property"IDTOKEN = "the id_token to be validated"tenant_id = "your tenant id"cert_str = PEMSTART + mspubkey + PEMENDcert_obj = load_pem_x509_certificate(cert_str, default_backend())public_key = cert_obj.public_key()depred = jwt.depre(IDTOKEN, public_key, algorithms=['RS256'], audience=tenant_id)if depred: print "Depred!"else: print "Could not depre token."
有关各种语言的JWT库的列表,请参见JWT网站。我正在使用pyjwt及其加密依赖(具有二进制依赖,因此需要针对目标OS构建和打包)。
然后,当然,你可以 验证其他细节,如索赔 的建议在这里。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)