0

我了解如何将基本身份验证与 jquery 一起使用,这不是我的问题。

这是我的结构:

网站(MVC.net 4,带有自定义成员资格提供程序的表单身份验证) Web 服务(Web API)

MVC.net 网站调用 Web 服务进行身份验证并获取表单身份验证内容以进行登录。

然后每个页面将使用 SPA 原理来获取数据。服务器只会做基本的 HTML 内容。

所以我需要以某种方式将凭据放入 jquery 以进行服务调用。

问题是密码永远不会被存储。只有一个哈希。可以将密码放入会话中并将其传递到页面中以供使用(这将发生的一切都是 SSLed 并且服务是 ssled),但这假定用户正在输入密码。

当然,用户可以选择“记住我”,这样在这种情况下用户将永远不会被提示登录,所以我不会有密码。

任何人对如何完成此操作有任何(安全)建议?我可以在哪里安全地存储 jquery 将使用的密码?

谢谢!

4

1 回答 1

0

我发现有 3 个解决方案可以解决这个问题:

  1. 在两个站点之间共享表单身份验证信息。如果您将机器密钥信息设置为与相同的 cookie 名称等共享,这将起作用。注意:这仅适用于域/子域。它不适用于 3 级域。

  2. 使用 OAuth 并获取令牌并将其与页面共享,以便 jquery 可以访问它并可以正确传递它。这要求令牌在 HTML 中可见。鉴于对于任何 oauth 请求,它已在 fiddler 等中通过并可见,这并没有大大降低安全性,但是......

  3. 使用特定于网站的 l/p 登录,验证用户,并从服务器获取随机生成的 GUID 或类似的令牌,上面有到期日期。把它放在每一页的源代码中。然后 jquery 可以将其作为 Authentication 标头传递,并且它将在令牌具有不会过期的时间长度内为该用户工作(它可能是滑动的)。这与 OAuth 非常相似,但可以在 oauth 之外为我们的站点设置不同的规则。显然,每个#2 的令牌仍然可见。

目前我们支持 Basic(因为服务是 ssled)和 OAuth。该网站使用表单身份验证,因此我们选择在 API 服务器上也启用表单身份验证,并使用表单身份验证的共享令牌对 jquery 进行身份验证。我们选择此路径的原因是,如果我们使用 OAuth,那么每次请求时,该令牌都会在页面源中可见。虽然这不一定是坏事,除非有人在您离开时来到您的计算机并进行查看然后可以伪造请求,我们认为既然我们有可用的表单身份验证,那将是最好的解决方法在客户端暴露任何东西。

如果有人发现这有任何安全风险,请告诉我!我看不到任何人,而且似乎没有其他人从我可以在网上找到的共享表单身份验证中看到任何问题,但是!这必须是安全的。

于 2012-11-14T22:05:38.423 回答