【发布时间】:2012-11-15 06:05:38
【问题描述】:
我了解如何在 jquery 中使用基本身份验证,这不是我的问题。
这是我的结构:
网站(MVC.net 4,带有自定义成员资格提供程序的表单身份验证) 网络服务(Web API)
MVC.net 网站调用 Web 服务进行身份验证,并为登录完成表单身份验证工作。
然后每个页面将使用 SPA 原理来获取数据。服务器只会处理基本的 HTML 内容。
所以我需要以某种方式将凭据放入 jquery 中以进行服务调用。
问题是密码永远不会被存储。只有一个哈希。可以将密码放在会话中并将其传递到页面以供使用(这将发生的所有内容都是 SSLed 并且服务是 ssled),但这假定用户正在输入密码。
当然,用户可以选择“记住我”,这样在这种情况下用户将永远不会被提示登录,所以我不会有密码。
有人对如何完成此操作有任何(安全)建议吗?我可以在哪里安全地存储 jquery 将使用的密码?
谢谢!
【问题讨论】:
-
我不熟悉asp,但是有没有可用的会话处理?例如,在coldfusion 中,您可以将该密码(或只是一个用户ID)存储在会话中,然后返回会话ID 和令牌。然后,后续请求只需发送包含 id 和令牌的 url 参数来获取会话。这导致用户信息不会随着每个请求来回传输。当然,在客户端浏览器环境中,由于设置了 cookie(在冷融合中),您甚至不必发送这些 url 参数。
-
所以您想将基本身份验证凭据存储在任何人都可以获取的客户端中?
-
不,这就是重点。我正在尝试提出某种混合动力。我也在考虑共享表单身份验证或其他东西,但我找不到任何有关如何传递表单身份验证 cookie 的信息。 (得到机器钥匙等一样)
-
Kevin B:我想过这个问题,但这只有在用户每次都必须输入密码的情况下才有效。如果他们不(还记得我吗?),那么我将没有密码,因为我们只存储我们验证的哈希值。不过谢谢!
-
据我了解,使用“记住我”按钮会创建一个持久性 cookie。因此,只要您使用 FormsAuthentication,您就不需要再次获取他们的凭据,他们仍然会通过身份验证。如果您在 Web 服务上启用了基本身份验证,那么您可能需要将其删除并信任您的前端来保护服务。您可以通过控制器推送所有内容并让它们调用 Web 服务来进一步启用此功能,因此您不必将服务公开给整个 Web,实际上是创建代理。
标签: jquery asp.net-mvc asp.net-web-api