我刚刚开始阅读JWT,我相信我理解什么是JWT代币。我对会话也相当熟悉。我相信我了解每种方法的优点和缺点。然而,有几个部分我感到困惑。
当请求受保护的资源时,您需要在每次请求时发送jwt,而不是在服务器上存储会话。但是:
1)您如何存储您的JWT令牌以及在哪里。根据我所读到的,我知道您向服务器发送身份验证请求,如果您成功进行身份验证,服务器会向您发送JWT令牌。然后你会怎么做?,你会像我在一些网站上读到的那样将JWT存储在cookie中吗?如果是这样,你是怎么做到的(使用php,使用javascript)。你是怎么读的。
2) 在使用会话时,或多或少您只需检查是否有会话来检查用户是否登录。在使用JWT时,如何实现这一点。
我在一些页面上也看到了这一点:
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
这和这有什么关系(如果有关系的话)
在我的情况下,我使用使用照明\基金会\Auth\身份验证用户;
,使用JWTAuth;
和在我的LoginController中使用Tymon\JWTAuth\Exceptions\JWTExc0019;
。然后我需要像这样得到我的JWTToken
use AuthenticatesUsers;
try {
$token = JWTAuth::attempt($request->only('username', 'password'), [
'exp' => Carbon::now()->addWeek()->timestamp,
]);
} catch (JWTException $e) {
return response()->json([
'error' => 'Could not authenticate: ' . $e.message,
], 500);
}
当然,如果我没有得到令牌,我会做更多的事情。就我而言,我是这样说的:
if (!$token) {
return response()->json([
'error' => 'Could not authenticate.'
], 401);
} else {
$data = [];
$meta = [];
//all what i need from users table if auth
$data['id'] = $request->user()->id;
$data['email'] = $request->user()->email;
$meta['token'] = $token;
//now comes the part, where I set my sessions:
Session::put('auth-user', (array)$request->user());
Session::put('jwt-token', $token);
Session::save();
return response()->json([
'data' => $data,
'meta' => $meta
])->withCookie('jwt-token', $token, config('jwt.ttl'), '/', null, true, true);
}
这实际上是我在LoginController中做的事情,我也有一个中间件,我有一个函数来处理刷新页面后的行为等等。
“我的。auth'=
我还在javaScript的
localStorage
和vuex
存储中处理大量的sessionStorage
。在网站中定义
或路线
。phpapi。php
我现在将使用我在中间件
之前定义的类
路由::组(['middleware'=
一些帮助我的资源:LaravelCookies,LaravelSession
希望你能得到一些灵感来创作你的
JWT
auth。
JWT主要是一种在restapi上对用户进行身份验证的方法,正如您所说的,您可以将其发送到客户机,而无需将其存储在会话中。
但是,如果您正在制作一个浏览器应用程序,我不认为有必要使用JWT身份验证,因为您可以使用会话和cookie来实现这一点。
JWT主要用于那些情况,例如,当您有一个移动应用程序前端时,不建议维护会话,而且可能不可能。
但是,如果您正在制作一个混合应用程序,那么将其存储在“浏览器”的本地存储中是一个不错的选择。JWT从不存储在服务器端。
>
从客户端来看,好的做法是将JWT存储在cookie中,模式为http_only=true,是安全的(因此只能通过https发送),因此javascript无法访问JWT。那么,我们就不用担心XSS附加了。
我们不需要将会话存储在服务器端。JWT包含两部分,有效负载数据和签名,由存储在服务器端的密钥签名,只有服务器才能知道。当我们从客户端接收令牌时,我们检查有效负载数据是否有效(用户信息、谁分配了该令牌、将该令牌分配给谁、授予该令牌的角色、过期时间),并检查签名以确保该令牌是由服务器分配的,而不是伪造的。然后将对用户进行身份验证。
这就像政府给公民的护照,数据(有效载荷)对每个人来说都是可读的,但签名只能由政府创建,它可以验证这一点。
问题内容: 我的项目是这样的: 有人可以告诉我将hibernate.cfg.xml放在哪里吗? 因为出现此错误: 问题答案: 配置文件必须位于上。 根据您的项目,这可以通过不同的方式来完成。 对于 Web应用程序WAR 项目(您正在Servlet容器中运行程序):当应用程序在容器中运行时,将其放入将在类路径上可见的文件中起作用。 对于 Maven的 风格的项目(在Servlet容器没有运行该程序)
问题内容: 我使用Eclipse(3.4),并且类编译时没有警告或错误。我的项目使用一个外部jar文件。 为了从另一个项目(不在Eclipse中)使用此类时,我需要在哪里放置此外部jar文件? 我可以将jar提取到项目文件夹中,但是感觉不对。 编辑:这个问题不是关于在Eclipse中导入jar,而是在Eclipse之外使用它们。 问题答案: 如果要在Eclipse项目中包含JAR文件,通常可以在项
问题内容: hibernate注释应该放在哪里? 它是我的实例变量上方的线吗?还是在吸气剂之前?还是在二传手之前?还是真的不重要吗? 非常感谢 问题答案: 您可以将它们放在 野外 或 吸气剂上 。从《 Hibernate注释参考指南》中: 2.2.1。将POJO标记为持久实体 (…) 根据您是否注释字段或方法,Hibernate使用的访问类型将是字段或属性。EJB3规范要求您在将要访问的元素类型上
问题内容: 休眠注释应该放在哪里? 它是我的实例变量上方的线吗?还是在吸气剂之前?还是在二传手之前?还是真的不重要吗? 非常感谢 问题答案: 您可以将它们放在 野外 或 吸气剂上 。从《 Hibernate注释参考指南》中: 2.2.1。将POJO标记为持久实体 (…) 根据您是否注释字段或方法,Hibernate使用的访问类型将是字段或属性。EJB3规范要求您在将要访问的元素类型上声明注释,即,
问题内容: 在Hibernate 4.x中,我曾按如下方式生成和导出在带注释的实体中定义的架构(使用Spring在类路径上查找带注释的实体): 这在Hibernate 5.0中不再起作用: 不复存在 该构造函数现在已不 除以下内容外,我在迁移指南中没有发现任何明显的参考资料: 从配置中删除了很多方法 基于一组带注释的实体,在与Hibernate 5.0 的现有JDBC连接上 生成和导出数据库的正确
我正在尝试运行Phusion Passenger,这是我得到的最远的。当它在网站上加载时,它就出现了 需要“rails/all”。。。0.550s捆扎机。要求1.510s[已弃用]I18n。enforce\u available\u locales将来将默认为true。如果确实要跳过区域设置的验证,可以设置I18n。强制\u available\u locales=false以避免此消息。应用初始