【问题标题】:WCF REST Authentication - Determine Web RequestWCF REST 身份验证 - 确定 Web 请求
【发布时间】:2011-10-21 15:30:05
【问题描述】:

确定对我的 REST 服务发出的请求是否来自 Web 客户端的最佳方法是什么。我知道我可以查看用户代理,但我担心这很容易被欺骗。

我想知道是谁发起请求的原因如下。它本机内置于网络浏览器中,您无法进行跨域请求。因此我不需要担心身份验证,因为我知道请求来自我的网站。

我的网站完全是用 HTML 和 Javascript 构建的,有什么建议吗? 或者在 Javascript 中是否有一种很好的方法来存储隐藏的用户名/密码,我可以只用于我的网站,而不向公众显示?

谢谢, 亚当

【问题讨论】:

  • 所以你无法控制 REST 服务?听起来这个问题是如何让 REST 服务做出决定,但是 HTML/javascript 的部分令人困惑。

标签: javascript wcf rest restful-authentication


【解决方案1】:

任何放入 javascript 的内容都可以通过使用调试器(例如 Firebug)找到,因此即使用户看不到它,用户也可以找到它。

但是,如果 javascript 首先调用 REST 服务以获取加密令牌,则其中包含加密时间戳的令牌可能是密码,因此您然后传递用户名和令牌以调用其余的REST 服务。

然后,您的服务器可以验证它是否已创建令牌并且它没有过期,并且用户名与令牌中加密的内容相匹配。

但是,这取决于您是否可以控制 REST 服务。

【讨论】:

  • 使用令牌是有道理的。但是有什么可以阻止某人这样做。自己初始请求然后使用响应令牌广告好不好?
  • @Adam - 如果他们可以进行身份​​验证,那么他们应该能够使用令牌,对吗?所以让他们进行身份验证,获取令牌,然后存储令牌并使用它代替密码,因为只有您的服务器才能生成令牌。您在 javascript 中所做的任何事情都可以在程序中复制,因此您只能控制其中的一部分。
【解决方案2】:

我想知道是谁发起请求的原因如下。它本机内置于网络浏览器中,您无法进行跨域请求。因此我不需要担心身份验证,因为我知道请求来自我的网站。

这不是一个好的假设。由于您已经给出的原因(容易欺骗用户代理),任何人都可以向您的应用程序发出请求。您甚至可以从客户端禁用 Firefox 和 chrome 中的跨源策略 - 因此即使您可以验证请求来自浏览器,仍然可以绕过您的安全措施:

Disable same origin policy in Chrome

有几种标准方法可以为此类服务实现安全性(正如 James 所提到的,假设您可以控制 REST 服务)。

  • 使用基本身份验证 - 如果您的应用程序通过 HTTPS 与 WCF 服务通信,则基本身份验证可能是最简单的方法。 See this question

  • 如果您的网站和 WCF 服务都是使用 .NET 实现的,并且您的 ASP.NET Web 应用程序使用 Forms 身份验证,则可以共享 Forms Auth cookie 并将其用于身份验证。 See this question

【讨论】:

  • 我确实可以控制 REST 服务。我的目标是避免为应用程序使用任何服务端语言。我正在尝试使用 JavaScript 和 HTML 构建整个应用程序。我确实对用户使用基本身份验证。这意味着一旦他们登录,所有请求都是通过他们的身份验证发出的。我担心的是最初的请求,比如说创建一个帐户。我可以使用网络帐户,但是由于 JavaScript,该用户名和密码被暴露了。也许我无法避免使用服务器端语言。
猜你喜欢
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
相关资源
最近更新 更多