JWT Auth 令牌适用于 Homestead,但不适用于生产服务器

Posted

技术标签:

【中文标题】JWT Auth 令牌适用于 Homestead,但不适用于生产服务器【英文标题】:JWT Auth token works in Homestead but not on production server 【发布时间】:2016-01-06 12:06:03 【问题描述】:

所以这就是交易。我有一个带有“satellizer”和“angular-jwt”的ionic 应用程序,它与带有barryvdh/laravel-cors 和tymondesigns/jwt-auth 的Laravel5 后端通信。在Homestead 结合使用离子服务时运行此组合效果很好。创建一个身份验证令牌并将其存储在 localStorage 中,并使用 Laravel 进行验证。此请求如下所示:

[IONIC SERVE] http://192.168.1.54:8100/#/auth
[POST] http://192.168.10.10/api/v1/authenticate?email=[email]&password=[password]  
Returns [the_token]  
[GET] http://192.168.10.10/api/v1/authenticate/user?token=[the_token]  
Returns the user object from Laravel

只要我将 api url 更改为我的实时服务器

[POST] http://domaintomyvps.com/api/v1/authenticate?email=[email]&password=[password]  
Returns [the_token]  
[GET] http://domaintomyvps.com/api/v1/authenticate/user?token=[the_token]  
Returns "error":"token_not_provided"   

身份验证工作正常,并返回了一个令牌。但是在发送获取请求时,我收到错误“token_not_provided”。

然后奇怪的事情发生了。当尝试来自 Chrome Postman 的相同请求时,令牌会验证并返回用户对象。

我的家园在 VirtualBox 和 Ubuntu 的 nginx 中作为 Vagrant 运行。我的生产服务器是 Debian 和 Apache 在 VPS 上。 Laravel 安装在设置和键方面是相同的。数据库完全相同(mysqldump)并且由于Postman创建了成功的结果而工作。

谁能指导我正确的方向或遇到同样的问题?您需要有关设置或代码的更多信息吗?

【问题讨论】:

请求是跨域的吗?如果很可能是 CORS 问题 是的。这就是为什么安装包 barryvdh/laravel-cors 以访问服务器的原因。发布电子邮件和密码时的第一个身份验证是跨域工作。我的本地 virtualbox 和 ionic 之间的请求也是 CORS 并且由于 CORS 包而工作正常 【参考方案1】:

这解决了我的问题。 将以下内容添加到我的 apache .htaccess disable apache 以从请求中删除 auth 标头。我在以下位置找到了这个答案:following thread

RewriteCond %HTTP:Authorization ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

【讨论】:

上帝保佑你善良的人

以上是关于JWT Auth 令牌适用于 Homestead,但不适用于生产服务器的主要内容,如果未能解决你的问题,请参考以下文章

JWT 身份验证令牌在非 /api 路由中无效

PHP Slim 4 - 使用 firebase JWT 令牌授权 api 请求

Laravel 5.4 Tymon JWT Auth Guard 驱动未定义

使用 slim-jwt-auth 生成令牌

使用slim-jwt-auth生成令牌

如何从 auth0 中的访问令牌中获取 jwt 令牌