我正试图从我的客户端向我的服务器发送一个Auth0 JWT,并对令牌进行验证。我通过PHP将从token_id身份验证返回的auth0发送到我的服务器,并且可以在AuthHttp中不出现任何问题。
简短而简单:
我有秘密ID,我有带有编码和解码的JWT助手类。
如何检查发送过来的JWT的头和正文=签名,如果这甚至是正确的方法。
编辑:
我传递我的记号,这是
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvbG93aWUuZXUuYXV0aDAuY29tXC8iLCJzdWIiOiJnb29nbGUtb2F1dGgyfDEwNDY4ODk4NjgxNzEwNjQ3Mjc5MCIsImF1ZCI6IlYwWWVaREliYmVGdEJ4Z3F2UkNzVkFjWWxscXpaZGlNIiwiZXhwIjoxNDc4NzMxNjIzLCJpYXQiOjE0Nzg2OTU2MjN9._uyKrxJ0lPR-tEPjOFiI5ygeiM689gqURcIfG4sWkWc
,然后我获取这个令牌的主体,并将它变成一个数组。
数组( iss => https://lowie.eu.auth0.com/ Sub=>google-OAuth2 x 1046889868176472790 aud => V0YeZDIbbeFtBxgqvRCsVAcYllqzZdiM exp => 1478731623 iat => 1478695623 )
一旦我有了数组,这就是我的有效载荷,对吗?
//下面是被验证为正确https://gyazo.com/93777863d988d8c6ef0fc4ea50755949的令牌的图像
那么,为什么下面的代码不给我相同的令牌呢?
$jwt = JWT::encode($bodyArray, "SuperSecureSecretSecret");但我还是收到了这个
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2xvd2llLmV1LmF1dGgwLmNvbS8iLCJzdWIiOiJnb29nbGUtb2F1dGgyfDEwNDY4ODk4NjgxNzEwNjQ3Mjc5MCIsImF1ZCI6IlYwWWVaREliYmVGdEJ4Z3F2UkNzVkFjWWxscXpaZGlNIiwiZXhwIjoxNDc4NzMxNjIzLCJpYXQiOjE0Nzg2OTU2MjN9.6lEg_0h0zytQZVBqDe-ZIS5PoSkFAJhWtRYSgaDCesY
发布于 2016-11-09 09:07:44
您应该使用一个现有的库,该库支持您使用的JWT签名类型。有关PHP可用选项的快速参考,请查看jwt.io中的库部分。
在大多数情况下,使用现有的库是首选的,但是,对库的质量做一些评估也很重要。
有关JWT签名验证,请阅读本文(JSON令牌库中的关键漏洞),以确保您对库的使用不会导致可能的漏洞。
更新:
令牌是不同的,因为它们使用不同的密钥签名,而有效负载也不同;iss在一个是"https://lowie.eu.auth0.com/",另一个是"https:\/\/lowie.eu.auth0.com\/"。您可以通过使用Base64解码器解码有效负载来检查这一点,并查看原始输出。
更重要的是,您不应该创建任何令牌,只需验证它们是否有效,并且是由您将实际身份验证过程委托给的可信颁发者发出的。
https://stackoverflow.com/questions/40498423
复制相似问题