单页应用程序授权


Single Page Application Authorization

我正在AngularJS上开发SPA应用程序,它从用PHP编写的RESTApi接收数据。我需要为它实现JWT授权。我得到了一个简单的PHP JWT库,可以对JWT令牌进行编码和解码,但不知道如何验证JWT令牌。有人能给我解释一下PHP方面JWT验证的步骤吗?

您需要首先解码标头(这是JWT按句点分割后的第一部分)。这将包含用于签名的算法,如:

{
  "alg": "HS256",
  "cty": "JWT"
}

这意味着使用了带有SHA-256的HMAC来创建该令牌的签名。HMAC是通过将秘密连接到消息并计算哈希生成的MAC,在这种情况下,哈希函数为SHA-256。因为,给定一个HASH是不可能(或者至少在硬件方面非常昂贵)计算输入的,即使知道消息是什么,你也猜不到关键。但是,给定消息(JWT的第二部分)和密钥,您可以再次计算哈希并验证是否等于签名(JWT第三部分)。答案1中有更多关于HMAC的信息。

不用说,尽管这是一种非常常见的算法,但JWT并不是唯一的算法,因此报头指示了算法。例如,Google JWT使用非对称密钥进行签名,即它们发布密钥的公共部分,该部分可用于验证签名,但不能用于签名。该算法为RS256(也称为RSA SHA-256)。

你会发现这个网站对调试2非常有用。您还可以在这里看到不同的算法和多种语言的不同实现的集合。

Firebase有一个PHP实现,可以对JWT3进行签名和验证。