2014-04-25 100 views
0

我正在开发AngularJS上的SPA应用程序,它接收来自PHP上的REST Api的数据。我需要为它实施JWT授权。我有一个简单的PHP JWT库,可以对JWT令牌进行编码和解码,但不知道如何验证JWT令牌。有人可以向我解释一下PHP端JWT验证的步骤吗?单页应用程序授权

回答

0

您需要将头先解码,这将包含用于签署类似的算法(这是JWT的第一部分,你用句拆分后“”):

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

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

不言而喻,虽然这是一个非常常见的JWT算法,但它并不是唯一的算法,因此也是表示算法的头。例如,Google JWT使用不对称秘密签名,即他们发布可用于验证签名但不能用于签名的密钥的公共部分。该算法是RS256(又名RSA SHA-256)。

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

Firebase家伙有一个PHP实现,可以签署和验证JWT 3