【问题标题】:WCF REST based services authentication schemes基于 WCF REST 的服务身份验证方案
【发布时间】:2011-02-04 07:30:04
【问题描述】:

对于我们正在构建的一组半公共 REST API,我有一个简单的身份验证方案:

                  /-----------------------\
                  | Client POST's ID/Pass |
                  | to an Auth Service    |
                  \-----------------------/
   [Client] ------------POST----------------------> [Service/Authenticate]
                                                             |
                                             /-------------------------------\
                                             |  Service checks credentials   |
   [Client] <---------Session Cookie-------  | and generates a session token |
      |                                      |         in a cookie.          |
      |                                      \-------------------------------/
      |
   [Client] -----------GET /w Cookie -------------> [Service/Something]
                               |                                          
              /----------------------------------\
              |  Client must pass session cookie |
              |      with each API request       |
              |       or will get a 401.         |
              \----------------------------------/

这很好用,因为客户端不需要做任何事情,除了接收一个 cookie,然后传递它。对于浏览器应用程序,这由浏览器自动发生,对于非浏览器应用程序,保存 cookie 并在每个请求中发送它是非常简单的。

但是,我还没有找到一种从浏览器应用程序进行初始握手的好方法。例如,如果这一切都是使用 AJAX 技术发生的,那么是什么阻止了用户访问客户端用来与服务握手的 ID/Pass?

似乎这是这种方法的唯一绊脚石,我被难住了。

【问题讨论】:

  • 您到底想防范什么?听起来“客户端”和“用户”是不同的参与者,您试图掩盖“客户端”具有硬编码凭据的事实?如果“用户”和“客户”对同一台机器具有相同的访问权限,那么现在您实际上只是通过默默无闻获得安全性。其次,对于 API,如果您要使用身份验证/授权方案,我强烈建议您考虑 OAuth 而不是自己创建。
  • 正确,客户端将是另一个想要使用我们的内容的网站,他们可能希望通过 REST/JSONP 执行此客户端。我想我的主要希望是能够控制使用我们 API 的各个 3rd 方。

标签: wcf security authentication rest


【解决方案1】:

一种可能性是为每个服务器 AJAX 页面生成一次性填充,并将该填充附加到会话 cookie。现在用户无法在没有一次性便笺簿的情况下发起会话。当然,他们可以只请求一个新页面来获取 pad。

【讨论】:

    【解决方案2】:

    您无法确保此类服务的安全。 This thread 讨论了一些方法,但没有一个是好的解决方案。

    如果您想使用您的 API 控制第 3 方,请强制他们使用服务器到服务器连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多