我在AngularJS上开发SPA应用程序,该应用程序从PHP上编写的REST Api接收数据。我需要为它实现JWT授权。我有简单的PHP JWT库,可以编码和解码JWT令牌,但不知道如何验证JWT令牌。有人能解释一下PHP方面的JWT验证步骤吗?
答案 0 :(得分:0)
你需要首先解码标题(这是你用句点分割后JWT的第一部分。“)这将包含用于签名的算法:
{
"alg": "HS256",
"cty": "JWT"
}
这意味着使用带有SHA-256的HMAC来创建此令牌的签名。 HMAC是通过将秘密连接到消息并计算散列而生成的MAC,在这种情况下,散列函数是SHA-256。因为,鉴于HASH是不可能的(或者至少在硬件方面非常昂贵)来计算输入,即使知道什么是消息,你也无法猜出密钥。但是给定消息(JWT的第二部分)和密钥,您可以再次计算散列并验证if是否等于签名(JWT的第三部分)。在这个答案1中有关于HMAC的更多信息。
毋庸置疑,尽管这是一种非常常见的JWT算法,但并不是唯一的算法,因此标题表示算法。例如,Google JWT使用非对称机密签名,即他们发布可用于验证签名的密钥的公共部分,但不能用于签名。该算法是RS256(a.k.a. RSA SHA-256)。
您会发现此网站对调试2非常有用。您还可以在这里看到不同的算法和许多语言的不同实现的集合。
Firebase的人有一个PHP实现,可以签署和验证JWT 3。