Joh*_*ohn 117 authentication cookies ember.js
令牌认证和使用cookie的身份验证之间有什么区别?
我正在尝试实施Ember Auth Rails演示,但我不明白使用令牌认证背后的原因,如Ember Auth常见问题解答中描述的"为什么是令牌认证?"
Ond*_*dar 277
Http是无国籍的.为了授权您,您必须"签署"您发送给服务器的每个请求.
令牌认证
对服务器的请求由"令牌"签名 - 通常意味着设置特定的http标头,但是,它们可以在http请求的任何部分(POST正文等)发送.
优点:
<img src="http://bank.com?withdraw=1000&to=myself" />,如果您通过cookie身份验证登录到bank.com,而且bank.com没有任何XSRF方法保护,我只会通过您的浏览器触发对该网址的授权GET请求来从您的帐户中提取资金.)请注意,您可以使用基于cookie的身份验证进行防伪措施 - 但您必须实施这些措施.Cookie身份验证
总的来说,我会说令牌会给你更好的灵活性,(因为你不受单一领域的束缚).缺点是你必须自己做一些编码.
dz9*_*902 40
对于 Google 员工:
有状态
机制
Authorization,只是没有任何特殊处理的标题,客户端必须管理传输的各个方面状态比较
hash(data + secret key),其中密钥只有服务器知道,因此可以验证令牌数据的完整性机制比较
httpOnly防止客户端 JavaScript 访问总结
小智 31
令牌需要存储在某处(本地/会话存储或cookie)
令牌可以像cookie一样过期,但你有更多的控制权
本地/会话存储无法跨域使用,请使用标记cookie
将在每个CORS请求上发送预检请求
当您需要流式传输某些内容时,请使用该令牌获取已签名的请求
处理XSS比处理XSRF更容易
令牌会在每次请求时发送,并注意其大小
如果您存储机密信息,请加密令牌
JSON Web令牌可以在OAuth中使用
代币不是银子弹,请仔细考虑您的授权使用案例
http://blog.auth0.com/2014/01/27/ten-things-you-should-know-about-tokens-and-cookies/
http://blog.auth0.com/2014/01/07/angularjs-authentication-with-cookies-vs-token/
int*_*xel 28
典型的Web应用程序通常是无状态的,因为它的请求/响应性质.HTTP协议是无状态协议的最佳示例.但是,由于大多数Web应用程序需要状态,为了保持服务器和客户端之间的状态,使用cookie使得服务器可以将每个响应发送回客户端.这意味着从客户端发出的下一个请求将包含此cookie,因此将被服务器识别.这样,服务器可以维护与无状态客户端的会话,主要了解应用程序状态的所有内容,但存储在服务器中.在这种情况下,客户端决不会持有州,这不是Ember.js的工作方式.
在Ember.js中,情况有所不同.Ember.js使程序员的工作变得更容易,因为它确实为您提供了状态,在客户端,每时每刻都知道它的状态,而不必向服务器请求状态数据.
但是,在客户端中保持状态有时也会引入在无状态情况下根本不存在的并发问题.然而,Ember.js也为您解决了这个问题,特别是ember-data就是为此而构建的.总之,Ember.js是为有状态客户设计的框架.
Ember.js不像典型的无状态 Web应用程序那样工作,会话,状态和相应的cookie几乎完全由服务器处理.Ember.js 完全用javascript(在客户端的内存中,而不是像其他一些框架那样在DOM中)保存它的状态,并且不需要服务器来管理会话.这导致Ember.js在许多情况下更加通用,例如当您的应用处于离线模式时.
显然出于安全原因,每次发出请求时都需要将某种令牌或唯一密钥发送到服务器才能进行身份验证,这样服务器就可以查找发送令牌(最初由服务器发出)和在将响应发送回客户端之前验证它是否有效.
在我看来,Ember Auth FAQ中所述使用身份验证令牌而不是cookie的主要原因主要是因为Ember.js框架的性质以及它更适合有状态的 Web应用程序范例.因此,在构建Ember.js应用程序时,cookie机制不是最佳方法.
我希望我的回答会给你的问题带来更多意义.
我相信这里有一些混乱.基于cookie的身份验证与HTML5 Web存储现在可用的重要区别在于,浏览器构建为在从设置它们的域请求资源时发送cookie数据.如果不关闭cookie,你无法阻止它.除非页面中的代码发送,否则浏览器不会从Web存储发送数据.页面只能访问存储的数据,而不能访问其他页面存储的数据.
因此,用户担心谷歌或Facebook可能会使用他们的cookie数据的方式可能会关闭cookie.但是,他们没有理由关闭Web存储(直到广告商想出一种方式来使用它).
因此,这是基于cookie和基于令牌的区别,后者使用Web存储.
基于令牌的认证是无状态的,服务器不需要在会话中存储用户信息。这提供了扩展应用程序的能力,而无需担心用户登录的位置。基于 cookie 的 Web 服务器框架具有亲和力,而基于令牌的则不是问题。因此,相同的令牌可用于从我们登录的域以外的域中获取安全资源,从而避免了另一个 uid/pwd 身份验证。
非常好的文章在这里:
使用令牌时...
联盟是需要的。例如,您想使用一个提供商(Token Dispensor)作为令牌颁发者,然后使用您的 api 服务器作为令牌验证器。应用程序可以向令牌分配器进行身份验证,接收令牌,然后将该令牌提供给您的 api 服务器进行验证。(同样适用于 Google 登录。或 Paypal。或 Salesforce.com。等)
需要异步。例如,您希望客户端发送请求,然后将该请求存储在某处,以便“稍后”由单独的系统执行。该单独的系统不会与客户端建立同步连接,并且可能不会与中央令牌分配站建立直接连接。异步处理系统可以读取 JWT,以确定工作项是否可以并且应该在稍后的时间完成。这在某种程度上与上面的联邦理念有关。不过这里要小心:JWT 过期了。如果保存工作项的队列在 JWT 的生命周期内未得到处理,则不应再信任声明。
需要客户签名的请求。在这里,请求由客户端使用其私钥进行签名,服务器将使用客户端已注册的公钥进行验证。
| 归档时间: |
|
| 查看次数: |
74242 次 |
| 最近记录: |