单页应用授权

Posted

技术标签:

【中文标题】单页应用授权【英文标题】:Single Page Application Authorization 【发布时间】:2014-06-11 16:44:42 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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


  "alg": "HS256",
  "cty": "JWT"

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

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

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

Firebase 有一个 PHP 实现,可以签名和验证 JWT 3。

【讨论】:

以上是关于单页应用授权的主要内容,如果未能解决你的问题,请参考以下文章

单页应用程序中的安全身份验证/授权

在单页 Clojure Web 应用程序中使用 Friend 进行身份验证和授权

如何从单页应用程序实现 OAuth 2.0 授权码授予?

SPA单页应用前后分离微信授权

如何使用 PKCE 为 React 单页应用程序实现 OAuth2 授权代码授予?

VUE开发SPA之微信授权登录