了解 JWT 和 HTTP 授权标头? (客户端:Angular,服务器:php)

Posted

技术标签:

【中文标题】了解 JWT 和 HTTP 授权标头? (客户端:Angular,服务器:php)【英文标题】:Understanding JWT and HTTP Authorization header? (client: Angular, server: php) 【发布时间】:2016-05-09 18:29:55 【问题描述】:

我的 Angular 应用程序使用 HTTP Post 将登录凭据发送到我的 php 服务器。我收到了信用并很好地创建了我的 JWT 令牌。我可以在响应正文中发回 JWT 令牌,将其保存在客户端并使用它为所有后续客户端请求创建授权标头。没关系。

我想要做的是将新创建的 JWT 令牌在 Authorization 标头中发送回客户端,并让我的客户端从标头而不是正文中保存它。这样我就可以根据需要刷新我的令牌,并且它可以在客户端无缝。

四处搜索,似乎在向服务器发送请求时设置了授权标头。在 php 中有 curl 函数,但我不确定这是否是正确的方向。

是否可以为 Http Post 响应创建授权标头?

【问题讨论】:

您可以创建任何您想要的标题。最好选择你自己的,比如“X-Token-Renewal”,因为授权已经有一个很好理解的含义,而以新的方式使用它会让人困惑。 谢谢蒂洛,你是对的! 【参考方案1】:

Thilo 的评论是正确的。更重要的是,在 php 中,你可以通过简单地使用“header”函数来创建任何你想要的响应头:

<?php
... POST api, generate $token, etc...
header('MyCustomHeader: Bearer'.$token);
... 
echo $http_body_response
?>

我的问题是,在 Chrome 中,我在控制台响应中寻找我的标题,而我本应该在“网络”选项卡下查看。网络选项卡显示附加到 http 响应的所有标头。

注意:我使用的是 angular2-beta,如果我添加另一个暴露它的响应标头,我只能在 Angular2 中访问我的自定义标头。一旦我这样做了,标题就会显示在控制台中。因此:

<?php
header("Access-Control-Expose-Headers: MyCustomHeader");
... POST api, generate $token, etc...
header('MyCustomHeader: Bearer'.$token);
... 
echo $http_body_response
?>

【讨论】:

以上是关于了解 JWT 和 HTTP 授权标头? (客户端:Angular,服务器:php)的主要内容,如果未能解决你的问题,请参考以下文章

如何设置授权标头(JWT)

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

Angular 4 HTTP GET 不包括用于 HTTP 标头中的授权的 JWT

使用 JWT 缺少授权标头

JWT:如何在标头中发送授权?

响应标头中缺少 jwt 授权令牌