基于WCF REST的服务身份验证方案

时间:2010-04-05 01:17:20

标签: wcf security authentication rest

对于我们正在构建的一组半公共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?

看起来这似乎是这种方法的唯一绊脚石而且我很难过。

2 个答案:

答案 0 :(得分:1)

一种可能性是为每个服务器AJAX页面生成一次性填充,并将该填充附加到会话cookie。现在,用户无法在没有一次性填充的情况下启动会话。当然,他们只需要一个新的页面就可以获得垫子。

答案 1 :(得分:0)

您无法获得此类服务。 This thread讨论了一些方法,但它们都不是一个好的解决方案。

如果要使用API​​控制第3个Partys,请强制它们使用服务器到服务器的连接。