我有一组半公共REST API的,我们正在建立一个简单的身份验证方案:WCF基于REST的服务的身份验证方案
/-----------------------\
| 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而不是自行创建。 – 2010-04-05 01:28:45
正确的说,客户端是另一个想要使用我们内容的网站,他们可能希望通过REST/JSONP来完成这个客户端。我想我的主要希望是能够控制使用我们API的各种第三方。 – FlySwat 2010-04-05 01:33:44