【问题标题】:How to securely use jquery to remote web service with Basic Authentication如何通过基本身份验证安全地使用 jquery 远程 Web 服务
【发布时间】: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


【解决方案1】:

我发现有 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,那么每次请求时,该令牌都会在页面源中可见。虽然这不一定是坏事,除非有人在您离开时来到您的计算机并进行查看然后可以伪造请求,我们认为既然我们有可用的表单身份验证,那将是最好的解决方法在客户端暴露任何东西。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多