用PHP验证Auth0 JWT令牌验证

时间:2016-11-08 23:56:09

标签: php angular jwt auth0

我试图将Auth0 JWT从我的客户端发送到我的服务器并验证令牌。我通过AuthHttp头将auth0身份验证返回的token_id发送到我的服务器,我可以在PHP中没有问题地获取它。

简短:

  • Angular 2 Auth0 JWT被发送到PHP服务器。
  • 如何验证签名是否正确?

我有秘密ID,我有编码和解码的JWT助手类。

我如何检查标题和正文=发送的JWT的签名,如果这是正确的方法。

编辑:

我传递了我的令牌

  

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvbG93aWUuZXUuYXV0aDAuY29tXC8iLCJzdWIiOiJnb29nbGUtb2F1dGgyfDEwNDY4ODk4NjgxNzEwNjQ3Mjc5MCIsImF1ZCI6IlYwWWVaREliYmVGdEJ4Z3F2UkNzVkFjWWxscXpaZGlNIiwiZXhwIjoxNDc4NzMxNjIzLCJpYXQiOjE0Nzg2OTU2MjN9._uyKrxJ0lPR-tEPjOFiI5ygeiM689gqURcIfG4sWkWc

然后我获取此标记的主体并将其变为数组

Array (
[iss] => https://lowie.eu.auth0.com/
[sub] => google-oauth2|104688986817106472790
[aud] => V0YeZDIbbeFtBxgqvRCsVAcYllqzZdiM
[exp] => 1478731623
[iat] => 1478695623 )

一旦我有阵列,这是我的有效载荷吗?

//这里是正确验证的令牌图片 https://gyazo.com/93777863d988d8c6ef0fc4ea50755949

那么为什么下面的代码没有给我相同的标记呢?

$jwt = JWT::encode($bodyArray, "SuperSecureSecretSecret");

然而我收到了这个

  

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2xvd2llLmV1LmF1dGgwLmNvbS8iLCJzdWIiOiJnb29nbGUtb2F1dGgyfDEwNDY4ODk4NjgxNzEwNjQ3Mjc5MCIsImF1ZCI6IlYwWWVaREliYmVGdEJ4Z3F2UkNzVkFjWWxscXpaZGlNIiwiZXhwIjoxNDc4NzMxNjIzLCJpYXQiOjE0Nzg2OTU2MjN9.6lEg_0h0zytQZVBqDe-ZIS5PoSkFAJhWtRYSgaDCesY

1 个答案:

答案 0 :(得分:0)

您应该使用支持您正在使用的JWT签名类型的现有库。有关PHP可用选项的快速参考,请查看jwt.io中的部分。

在大多数情况下,首选使用现有库,但对库的质量进行一些评估也很重要。

对于JWT签名验证,请阅读本文(Critical vulnerabilities in JSON Web Token libraries)以确保您对库的使用不会导致可能的漏洞。

<强>更新

令牌不同,因为它们使用不同的密钥签名,有效负载也不同;其中iss"https://lowie.eu.auth0.com/",另一方为"https:\/\/lowie.eu.auth0.com\/"。您可以通过使用Base64解码器解码有效负载来查看原始输出。

更重要的是,您不应该创建任何令牌,只需验证它们是否有效并且由您委派实际身份验证过程的受信任颁发者颁发。