繁体   English   中英

Rails 3 - 基本的http身份验证与使用iphone的身份验证令牌

[英]Rails 3 - basic http authentication vs authentication token with iphone

最初我使用基本的http身份验证来按照本指南对设计用户进行身份验证:

http://jessehowarth.com/2011/04/27/ajax-login-with-devise

我成功地验证了用户,但会话仍然永远登录。 没有办法破坏用户的会话。 事实上,当我添加user_signed_in? 在我的create方法中设计的方法,即使通过json注销也总是返回true。 所以我得出结论,没有办法使用基本的http身份验证结束会话。 你真正要做的就是检查用户是否已经登录并将状态代码作为json发送回客户端。

然后我尝试了身份验证令牌路由,它允许您使用身份验证令牌创建会话,然后通过删除该身份验证令牌来销毁会话,并且用户必须再次登录才能访问需要身份验证的页面,如在这篇文章中显示:

使用CURL进行设计和认证!

这样做的缺点是,您需要为需要身份验证的每个页面输入这个非常长的字符串,这似乎有点不合需要。 我希望这里有两个世界中最好的,你可以像在网络浏览器中一样登录和注销。

我不确定我所说的一切是否准确,但似乎与这篇文章一致:

设计和rails 3中的http身份验证

在那篇文章中,他说身份验证令牌“比http基本身份验证更安全,因为密钥可能会过期”。 我认为他的意思是,一旦您使用基本身份验证登录,那就是它,您将永远登录,而身份验证令牌可以使其过期并强制用户再次登录。 这是准确的解释吗?

谢谢你的回复

HTTP身份验证的工作方式,一旦浏览器登录(即发送WWW-Authenticate标头),它将保持登录状态,直到其HTTP身份验证缓存过期(通常在您退出浏览器时)。

由于浏览器继续在HTTP身份验证中发送有效凭据(没有“HTTP注销”),这就是您看到用户仍然登录的原因。

我的建议是在Devise中使用authentication_token功能并将?auth_token传递给您的API。 请记住,即使它是POST / DELETE / PUT /等,您也必须将它们作为URL的一部分传递。 (这是一个可能现在修复的Devise bug)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM