我试图将Auth0 JWT从我的客户端发送到我的服务器并验证令牌。我通过AuthHttp头将auth0身份验证返回的token_id发送到我的服务器,我可以在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
答案 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解码器解码有效负载来查看原始输出。
更重要的是,您不应该创建任何令牌,只需验证它们是否有效并且由您委派实际身份验证过程的受信任颁发者颁发。