另一分钟我读了一篇关于OAuth的文章。 它特别描述了一系列请求期间客户端和服务提供者之间交换的令牌。 文章还提到OAuth作为授权层在RESTful API中获得了显着的普及。 据我了解,REST应该保持完全无状态。 问题:这个重复的令牌不会交换鱼雷REST的“无状态”原理吗? 恕我直言,令牌可以被看作是一种会话ID,不是吗?
我感兴趣的是那些在编程方面有关于无状态和有状态devise的具体信息的文章。 我感兴趣,因为我想了解更多,但我真的找不到任何好的文章。 我已经阅读了几十篇关于Web的文章,这些文章模糊地讨论了这个主题,或者他们正在讨论Web服务器和会话 – 这也是“有状态的vs无状态的,但是我感兴趣的是编码中的状态devise和状态devise。 例如:我听说BL-class是无状态的,实体类(或至less我称之为Person类(id,name,..))是有状态的等等。 我认为重要的是要知道,因为我相信如果我能理解它,我可以写出更好的代码(例如粒度)。 无论如何,真的很短,这就是我所知道的有状态vs无状态: 有状态(如WinForms):存储数据以供进一步使用,但限制了应用程序的可伸缩性,因为它受CPU或内存限制 无状态的(像ASP.NET一样 – 尽pipeASP试图使用ViewStates来实现状态化):在完成操作之后,数据被传输,实例被移交给线程池(Amorphous)。 正如你所看到的,这是非常模糊和有限的信息(并且非常专注于服务器交互),所以我会很感激,如果你能给我提供一些更美味的信息:)
当应用程序依赖于无状态身份validation(使用类似HMAC)时,是否有必要使用CSRF保护? 例: 我们有一个单一的页面应用程序(否则我们必须在每个链接上添加标记: <a href="…?token=xyz">…</a> 。 用户使用POST /authvalidation自己。 成功的身份validation服务器将返回一些令牌。 令牌将通过JavaScript存储在单个页面应用程序中的某个variables中。 这个令牌将被用来访问像/admin这样的受限制的URL。 令牌将始终在HTTP头中传输。 没有Http Session,也没有Cookies。 据我所知,应该(?!)不可能使用跨站点攻击,因为浏览器不会存储令牌,因此它不能自动发送到服务器(这就是使用Cookies /会议)。 我错过了什么吗?
Bob使用Web应用程序来实现某些function。 和: 他的浏览器正在节食,因此它不支持cookies 。 Web应用程序是一个非常stream行的应用程序,它在特定时刻处理很多用户 – 它必须很好地扩展 。 只要保持会话会对同时连接的数量施加限制 ,当然会带来不可忽视的性能损失 ,所以我们可能希望有一个无会话的系统:) 一些重要的说明: 我们确实有运输安全 ( HTTPS及其最好的朋友); 在幕后,Web应用程序将代表当前用户的许多操作委托给外部服务 (这些系统将Bob识别为其用户之一) – 这意味着我们必须将Bob的凭据转发给他们 。 现在,我们如何validation鲍勃(每个请求)? 这将是一个合理的方式来实现这样的事情? 通过HTMLforms的隐藏字段与证书打网球 … 球包含的凭据( 用户名和密码 )和两个球拍分别是浏览器和Web应用程序。 换句话说,我们可以通过表单域而不是通过cookie来回传输数据。 在每个Web请求中,浏览器都会发布凭证。 尽pipe在单页应用的情况下,这可能看起来像在墙壁上打壁球 ,而不是打网球 ,因为包含凭证的网页表单可能在网页的整个生命周期(以及服务器将被configuration为不提供凭证)。 存储在页面的上下文中的用户名和密码 – JavaScriptvariables等单页需要在这里,恕我直言。 encryption的基于令牌的authentication。 在这种情况下,login操作将导致生成一个encryption的安全令牌(用户名+密码+其他)。 这个令牌将被返回给客户端,并且即将到来的请求将伴随令牌。 这有道理吗? 我们已经有HTTPS … 其他… 最后的手段:不要这样做,在会话中存储凭据! 会议是好的。 有或没有cookies。 关于前面提到的任何想法,是否会出现任何networking/安全问题? 例如, 超时 – 我们可能会保留一个时间戳 ,以及证书(时间戳=鲍勃input证书的时间)。 例如,当NOW – 时间戳>阈值时 ,我们可能会拒绝该请求。 […]
我正在使用Rails构build一个Web应用程序。 目前,我正在使用HTTP会话的devise很容易设置,它运作良好。 该应用程序由一个提供AJAX Web应用程序的URL组成。 其余的可用URL属于REST API。 所以,一切和每一个小数据请求都是通过AJAX完成的。 现在我想扩展整个事情来支持本地客户端。 我读了很多关于无状态身份validation,http基本和摘要auth,http会话,cookie,xsrf等等。现在我觉得我不能有一个安全的应用程序,因为总有办法劫持它的一些部分。 1 .: HTTP会话比。 无状态身份validation令牌 有什么不同? 我不明白。 HTTP会话: 客户端请求一个URL(第一个请求到服务器) 服务器给出正常的响应加上一些唯一的string(==会话ID) 客户端必须发送这个string与每个请求(这是使用HTTP标头自动完成) 客户端login – >服务器记住这个特定的会话ID现在login 客户端访问一个页面,需要auth – >没有特别的事情做,因为会话ID将自动通过HTTP头部发送到服务器 无状态身份validation令牌: 客户端请求URL(对服务器的第一个请求) 服务器只是给出正常的响应, 没有任何密钥或令牌或ID (这里没什么特别的) 客户端login – >服务器创build一个授权令牌,并将该令牌发送给响应中的客户端 客户端访问页面,需要身份validation – >客户端必须提交身份validation令牌 对我来说这两种方式看起来都很相似 使用Rails,我还可以select将会话存储在数据库中… Devise将使用无状态身份validation令牌。 2:authentication方法 现在我用{"user":{"email":"e@mail.com","password":"p455w0rd"}}使用POST /users/sign_in 。 但是还有其他的可能性,比如HTTP基本authentication和HTTP摘要authentication,还有像oAuth这样的解决scheme(对我来说太大了)。 从我读过的内容来看: 关于sign_in安全性,当前的POST /users/sign_in和HTTP基本authentication之间没有区别。 两者都使用明文。 对于sign_out HTTP基本身份validation有一个缺点:退出只能closures浏览器窗口 HTTP摘要authentication有一个巨大的优势:它根本不传输密码(只是密码和随机生成的string散列) (德文)维基百科说:所有浏览器都不支持HTTP摘要authentication。 也许这个信息是老路? 我需要的: 用户名和哈希密码(bcrypt)存储在数据库中。 […]
我已经阅读了很多关于智威汤逊以及如何通过智威汤逊创build“无状态”会话的内容。 我所理解的要点是,由于签名和到期,你可以基本上发送整个会话由客户端保存,服务器不必维护一个数据库来记住会话。 我不明白的是如果你的用户需要注销会发生什么,或者你需要在到期之前使会话无效? 从技术上讲,你可以指示浏览器从客户端删除它,但是你不能确定这是否真的发生。 令牌本身在技术上仍然有效,如果您的删除说明没有遵循,它仍然可以使用。 这种理解是否正确? 如果是这样,这是不是客户端会话pipe理的一个巨大的错误? 除了让服务器存储会话或缩短到期时间之外,还有什么方法可以克服这一点吗?
HTTP有HTTP Cookies。 Cookies允许服务器跟踪用户状态,连接数量,上次连接等。 HTTP具有持久连接(Keep-Alive),可以在同一个TCP连接中发送多个请求。