浏览器如何存储/重新创建授权令牌?

Posted

技术标签:

【中文标题】浏览器如何存储/重新创建授权令牌?【英文标题】:How are authorization tokens stored / recreated by the browser? 【发布时间】:2020-03-20 06:22:04 【问题描述】:

我正在查看此页面的网络活动:https://helm.csod.com/ux/ats/careersite/4/home?c=helm&lang=de-DE。

特别是在带有名称的帖子请求中:“搜索”。它使用授权令牌。

tldr:以下授权令牌如何存储在客户端?

目标:

我想了解浏览器(客户端)如何存储此授权令牌。我不需要获取数据或知道如何用硒或 sthg 刮擦。我只会对背后的机制感兴趣。

我尝试了什么:

我在页面源中找到了令牌:view-source:https://helm.csod.com/ux/ats/careersite/4/home?c=helm&lang=de-DE。

似乎在/player-career-site/1.15.4/pages/home.js 中创建了一个对象csod。 然后密钥存储在csod.context。 最后,csod.player.initialize(csod.context) 被调用。

不幸的是,我未能深入挖掘代码并找到这些函数,因为initialize 的匹配项太多,而我的 js 技能太差了。 作为存储,我只知道 Cookie。它可能会被转换/加密并存储在 cookie 中?但是在添加到请求Header之前如何恢复到“原始”令牌?

【问题讨论】:

【参考方案1】:

这似乎是一种防止 CSRF 的方法。

token 是在后端使用密钥创建的,它将原始密钥存储在会话中并将令牌发送到客户端。

客户端发送请求时,token以数据作为header或与数据一起post,然后后端获取session中存储的key,用同样的方法生成token并与posted比较令牌。如果它们相等则没有问题,则授予访问权限。

根据算法(sha256、md5 等),您无法解密,因此无需还原

而浏览器不这样做,因为它可以被操纵,没有意义。

【讨论】:

非常感谢您的回答。这已经很高兴知道了。我并没有真正了解密钥是如何存储在客户端的。你知道它是如何工作的吗? 它可以存储在元标记中,在 jquery 端的 ajax 设置中,或者作为隐藏在表单中的输入,任何可以处理请求的东西都可以存储它。 hmm 也许我误解了一些东西,但我认为令牌必须存储在客户端(如果它们用于请求标头中),...不会元标记,输入隐藏形式等是Server端吗? 令牌存储在客户端,密钥存储在服务器端的会话中,看这里https://***.com/questions/6287903/how-to-properly-add-csrf-token-using-php【参考方案2】:

这里发送的令牌是JWT(JSON Web Token)。这是一种广泛使用的标准认证机制。 您可以使用 JS、Java、PHP、Python 等任何语言创建自己的令牌。

我正在添加一个基本的身份验证流程:

    假设用户出现在表单上。输入他的电子邮件和密码。 现在正在向服务器发送一个带有凭据的 HTTP 请求。后端服务器检查详细信息,如果成功,则返回包含身份验证令牌的响应。 大部分时间此令牌存储在 localstorage 中,有时存储在 cookies 中。 现在,对于每个请求,都会从存储的位置提取令牌并在标头中发送。 在后端,检查请求头是否有详细信息。然后做出相应的回应。 最后,每当有人注销时,该令牌就会从前端移除。

希望对你有帮助!如果您有任何疑问,请告诉我

【讨论】:

很好的信息谢谢。那实际上更接近我正在寻找的答案。可悲的是,赏金已经被自动分配了。你会说什么,这个页面存储在哪里?如果我删除了 Cookie ASP.NET_SessionId,我就不能再使用过滤器了。会不会是这个 Cookie 生成了授权码? (删除本地或会话存储没有影响,..) 实现基于会话的授权时设置cookie。 嗯,我知道何时设置了 Cookie。问题更多的是这是否是用作 Auth-key 输入的 Cookie/值,以及 Cookie 值如何转换为 Auth-key?那里使用什么算法。会非常有兴趣了解这一点。无论如何,谢谢,我真的很感谢你抽出宝贵的时间!! Auth-key to cookie 是在服务器端创建的哈希值,当请求发送到服务器时检查是否请求会话 cookie。然后解码验证。你可以了解更多codeahoy.com/2016/04/13/generating-session-ids

以上是关于浏览器如何存储/重新创建授权令牌?的主要内容,如果未能解决你的问题,请参考以下文章

在基于 Web 浏览器的客户端上存储授权(或 JWT)令牌的位置?

如何将 Magento 客户授权令牌从 php curl 传递到浏览器?

如何在 Angular 应用程序中存储身份验证令牌

如何在 NodeJS 中使用 JWT 令牌验证路由

浏览器刷新后丢失 JWT 令牌

使用 React 存储令牌