如何使用基本身份验证安全地将jquery用于远程Web服务

时间:2012-11-13 18:49:28

标签: jquery asp.net-mvc asp.net-web-api

我理解如何使用jquery进行基本身份验证,这不是我的问题。

这是我的结构:

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

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

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

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

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

用户当然可以选择"记住我"所以在这些情况下永远不会提示用户登录,因此我没有密码。

任何人都有任何(安全)建议如何实现这一目标?我在哪里可以安全地存储jquery将使用的密码?

谢谢!

1 个答案:

答案 0 :(得分:0)

我发现有3个解决方案适用于此:

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

  2. 使用OAuth并获取一个令牌并与该页面共享,以便jquery可以访问它并可以正确传递它。这要求令牌在HTML中可见。鉴于它已经在提琴手等中传递并且可见于任何oauth请求,这并不是那么安全,但是......

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

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

    如果有人发现任何安全隐患,请告知我们!我无法看到一个,似乎没有其他人看到从我在网上找到的共享表单身份验证的任何问题但是!这必须是安全的。