【发布时间】:2015-11-15 14:24:57
【问题描述】:
我已按照此处的说明获取 Web API 的访问令牌。
https://msdn.microsoft.com/en-us/library/azure/dn645542.aspx
我有这个工作,但文档在弄清楚如何在 PHP 中验证令牌时含糊不清。
您可以使用响应中返回的访问令牌对受保护资源(例如 Web API)进行身份验证。通常,令牌使用承载方案在 HTTP 请求中呈现给 Web API,RFC 6750 中对此进行了描述。本规范说明了如何在 HTTP 请求中使用承载令牌来访问受保护的资源。
当 Web API 接收并验证令牌时,它会授予本机客户端应用程序对 Web API 的访问权限。
如何在应用程序中验证 JWT?我有一个 PHP 框架,它使用带有令牌、签名、密钥和算法的 PHP openssl_verify() 函数,但是当我使用 Azure 的私钥和 SHA256 算法时收到错误:
openssl_verify(): supplied key param cannot be coerced into a public key
这让我相信我在 PHP 中用来验证的密钥不正确。目前,我正在使用为 Active Directory 应用程序生成的私钥,这恰好与我在点击 oauth2/token url 时用于“client_secret”参数的值相同(任何其他值都会导致没有令牌生成,所以这可能是正确的)。
密钥类似于(但实际上不是):
cLDQWERTYUI12asdqwezxctlkjpoiAn7yhjeutl8jsP=
我认为 openssl 需要证书的地方...如果是这样,我似乎无法在 Azure 门户中找到该证书。
我在这里缺少什么?我应该使用 openssl_verify() 来验证 JWT 的密钥是什么?在 Azure 中的哪里可以找到它?
谢谢
--
更新:
我在这里找到了公钥:https://login.windows.net/common/discovery/keys
但是我仍然无法使用提供的 X5C 来验证签名。你如何在 PHP 中做到这一点?
--
更新 2:
我使用转换为使用“e”和“n”参数的公钥创建一个 .pem 文件。这收到了一个公钥。
现在我在用它解密时收到 OPEN SSL 错误:
error:0906D06C:PEM routines:PEM_read_bio:no start line
【问题讨论】:
标签: php azure openssl cryptography jwt