如何将 JWT 令牌从 PHP 发送到 Angular?

Posted

技术标签:

【中文标题】如何将 JWT 令牌从 PHP 发送到 Angular?【英文标题】:How to send JWT token from PHP to Angular? 【发布时间】:2019-01-06 03:57:26 【问题描述】:

因此,不幸的是,我仍在尝试很好地掌握我的应用程序必须经过的流程才能提供身份验证。所以我打算制作一个带有 php 后端的 Angular 应用程序。要获得 JWT,用户将提供他们的电子邮件/密码作为 HTTP 发布请求的正文,该请求将发送到 PHP 文件。

在该文件中,将访问数据库以检查其凭据,如果它们有效,则需要向它们提供 JWT。我的问题是,我将如何将该 JWT 令牌发送到前端?

我想做一个简单的echo json_encode($jwt) 是个坏主意。

我可以使用 PHP 的 setcookie() 发送一个 cookie 以及其余的 HTTP 标头。我可以将该 cookie 设置为 httpOnly 以使其更加安全,但我需要添加另一个 cookie 以防止 XSRF 攻击。

1234563但是我是否也可以使用 Bearer 身份验证方案并使用该 Authorization HTTP 标头将新创建的 JWT 令牌从 PHP 文件传递​​给 Angular?

对不起,如果这有点令人困惑。如果您有任何问题,请发表评论。

【问题讨论】:

只是不要在$jwt 中包含任何过于敏感的数据,并在用户登录时将其发送回您的 ajax 响应中。然后使用它来签署所有后续调用(在标题中)会议。您应该使用库来解析每个请求(服务器端)上的$jwt,如果检测到任何篡改,则中止调用并采取任何必要的措施。 这是否可以防止 CSRF 攻击? 【参考方案1】:

简单地在 cookie 中设置 jwt 或只返回 jwt,甚至添加到响应的标头有什么问题?

我的看法是,这完全取决于您想在客户端如何阅读它。如果我们在谈论标准,那么,在响应的标题中或设置 cookie 可能是最标准的方法,但没有什么能阻止你/没有规则手册将其作为 json 返回例如

任何安全验证都应该在服务器端进行,因为没有什么能阻止我或你只是操纵 javascript 并试图炸毁服务器。使用 json_encode 或在响应的标头甚至 cookie 上接收它,我将可以访问它。毕竟,我需要它来提出进一步的要求。

关于 JWT 的事情是,在字符串组合的下面,有数据,比如用户名、电子邮件、(密码?)和过期日期。您可以将您想要的任何信息组合到$jwt 中,它使用一个秘密(只有您的后端知道)对其进行加密,然后将其返回给用户。每当用户提出请求时,您需要:

    验证是否在 HTTPRequest 中接收到授权令牌 (jwt)

    验证令牌是否有效以及内容是否有效(例如 expire_date)。

如果您正在寻找有关此主题的可能安全漏洞(我的意思是此主题​​,验证并确保请求它的用户收到令牌),其中之一是 Man in the middle,但没有 HTTPS 连接解决不了

【讨论】:

您确实提出了一些有效的观点,并提醒我使用具有良好保护的密钥和 HTTPS 连接的 JWT 可以很好地防止安全漏洞。但我很确定我在其他帖子上读到过,如果有人希望执行 CSRF 攻击,可以窃取 JWT 令牌并使用它向 API 发出请求。是的,由于 JWT 的性质,他们根本无法修改令牌,但在 JWT 过期之前,他们仍然可以假设 API 过载。 想象一下普通用户故意向请求发送垃圾邮件的场景,或者一些糟糕的开发正在发出不间断的请求。限制这些的方法是在服务器端限制每个用户或每个 IP 或每个令牌的请求限制。顺便说一句,如果你找到那个帖子,给我链接,我喜欢看东西:P ***.com/questions/27067251/…

以上是关于如何将 JWT 令牌从 PHP 发送到 Angular?的主要内容,如果未能解决你的问题,请参考以下文章

PHP:如何使用 JWT 从 API 注销

如何从 expressjs 发送 jwt 令牌以响应应用程序? [关闭]

如何将 JWT 令牌发送到 node.js 服务器

如何将 JWT 令牌发送到 Cookie 并在其他路由中使用?

如何将 jwt 令牌发送到 node.js 中的受保护路由

spring boot - 假装客户端发送基本授权标头|将 jwt 令牌从一个微服务传递到另一个微服务