【发布时间】:2011-11-12 22:10:32
【问题描述】:
应该是对我问题的简单回答,但在网络上我似乎得到了相互矛盾的信息。
假设我有一个使用基本 HTTP 身份验证的简单 API。移动应用程序使用我在 SSL 上的 API 来注册新用户 (POST) 和 (GET) ANY 用户信息/配置文件。
问题:我是在使用 HTTP 身份验证验证用户还是应用程序?
举个例子……
让我们说
api.somedomain.com/user/create
api.somedomain.com/user/{userID}
场景 1:API 在标头中使用基本身份验证,应用程序发送开发人员用户名和密码(不是登录到他们的应用程序的用户)。应用可以创建用户,应用可以查看用户帐号。
缺点:如果有人发现应用程序使用的用户名和密码,他们可以创建用户并查看帐户。
场景 2:我通过基本身份验证而不是应用程序来验证用户。这样用户可以在登录应用程序时查看他们的信息。
缺点:应用程序无法创建新用户,因为他们需要先以用户身份进行身份验证。
现在我知道第一个答案将是“使用 OAuth”,但在这种情况下,我想要一个基本身份验证的答案。
提前致谢
【问题讨论】:
-
你已经列出了优点和缺点。现在,您有什么要求?
-
移动应用程序需要允许用户通过 API 注册并通过 API 查看其他用户的个人资料。但是我只希望应用程序使用 API(也许稍后会有更多应用程序需要访问)。我的问题是,在场景 1 中,任何拥有应用程序密钥的人都可以创建一个帐户。不好!我知道,由于我无法控制移动应用程序,因此很难找到仍然可能的密钥。
-
我应该使用 HTTP 身份验证来验证用户或应用程序,还是两者兼而有之?该应用程序供用户在没有帐户时创建帐户,或查看其帐户详细信息或查看其他帐户(只读)。
-
您不需要在整个 API 中要求相同的身份验证。如果您打算使用基本身份验证,则可以仅对某些资源要求它(至少在 PHP 和 CGI 中;其他环境可能将身份验证完全留给 Web 服务器)。这意味着您可以拥有一个不需要身份验证的注册 API,而其他一切都需要。
-
我发现了一些我认为可以回答我的问题的东西: Quote: 首先重要的是,进行 REST 查询的系统不是交互式用户。因此,您永远不应要求或允许用户使用交互式用户凭据进行 REST 身份验证。唯一的例外是客户端/服务器应用程序,其中客户端代表交互式用户,客户端和服务器之间的协议是 RESTful API。 " broadcast.oreilly.com/2009/12/…
标签: html security http rest restful-authentication