【发布时间】: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