我已按照此处的说明获取Web API的访问令牌。从Azure Active Directory验证JWT
https://msdn.microsoft.com/en-us/library/azure/dn645542.aspx
我有这个工作,但该文件是模糊的,当谈到搞清楚如何验证在PHP中的令牌。
您可以使用响应中返回的访问令牌对受保护的资源(例如Web API)进行身份验证。通常,使用RFC 6750中介绍的承载方案将令牌呈现给Web API。HTTP规范说明了如何在HTTP请求中使用承载令牌来访问受保护的资源。
当Web API接收并验证令牌时,它为本地客户端应用程序提供对Web API的访问权限。
如何在应用程序中验证JWT?我有一个使用PHP openssl_verify()函数与令牌,signiture,密钥和算法PHP框架,但我收到的时候我使用私钥从天青与SHA256算法错误:
openssl_verify(): supplied key param cannot be coerced into a public key
这使我相信我在PHP中用来验证的关键是不正确的。目前,我正在使用为Active Directory应用程序生成的私钥,当碰到oauth2 /令牌url时,碰巧也是我用于“client_secret”参数的相同值(任何其他值都不会导致令牌被生成,所以这可能是正确的)。
的关键是类似(但它实际上不是):
cLDQWERTYUI12asdqwezxctlkjpoiAn7yhjeutl8jsP=
哪里beleive OpenSSL的需要有一个证书......如果是这样,我似乎无法找到这个地方证书是在Azure门户。
我在这里错过了什么?我应该使用openssl_verify()来验证JWT以及我在Azure中找到它的关键是什么?
感谢
-
UPDATE:
我发现这里的公共密钥:https://login.windows.net/common/discovery/keys
不过,我仍然无法使用提供验证签名的X5C。你如何在PHP中做到这一点?
-
更新2:
我使用的转换来创建同时使用的 'e' 和 'n' 参数的公共密钥为.pem文件。这收到了一个公钥。
error:0906D06C:PEM routines:PEM_read_bio:no start line
看起来你已经解决了这个问题在http://stackoverflow.com/questions/32185238/how-do-i-verify-a-json-web-token-using-a-public-rsa-key和如果你能在这里总结解决方案的关键点,那么会更好,那么其他有类似问题的社区会从这个线索中受益。 –