到目前为止,我可以提出的最佳解决方案:
(中的第一个值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-----END CERTIFICATE-----
(换行看起来很重要),然后将结果用作公钥(与https://jwt.io/上的id_token结合使用)。
当然,您的实际用例可能是让某些程序验证传入的JWT id_tokens,所以您的目标将不是简单地通过https://jwt.io/上的Web UI获取令牌来进行验证。
例如, ,我需要这样的东西:
#!/usr/bin/env python
import jwt
from cryptography.x509 import load_pem_x509_certificate
from cryptography.hazmat.backends import default_backend
PEMSTART = "-----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 + PEMEND
cert_obj = load_pem_x509_certificate(cert_str, default_backend())
public_key = cert_obj.public_key()
decoded = jwt.decode(IDTOKEN, public_key, algorithms=['RS256'], audience=tenant_id)
if decoded:
print "Decoded!"
else:
print "Could not decode token."
有关各种语言的JWT库的列表,请参见JWT网站。我正在使用pyjwt及其加密依赖(具有二进制依赖,因此需要针对目标OS构建和打包)。
然后,当然,你可以 的建议在这里。