29

我有一个提供 API 的应用程序。此应用程序是 OAuth2 提供程序。

我想使用仅客户端应用程序访问此 API(读取和写入)。我正在使用JSO使这更容易。

它工作得很好。

问题是,我不必在任何地方输入我的客户密码(我在我的应用程序中注册的应用程序)。而且我理解为什么,任何人都可以使用它。

所以,如果我可以在没有客户端密码的情况下访问我的 api,你能向我解释一下它的目的是什么吗?

4

3 回答 3

14

这个讨论很好地解释了为什么客户端密码对于服务器端应用程序比客户端应用程序更重要。摘录:

Web 应用程序 [服务器端应用程序] 使用客户端机密,因为它们代表了巨大的攻击向量。假设有人毒化了一个 DNS 条目并设置了一个“相似”的流氓应用程序,这种并列可能几个月都不会被注意到,因为这个中介会吸收大量数据。客户端机密应该可以减轻这种攻击向量。对于单用户客户端,妥协必须一次一台设备,相比之下,这是非常低效的。

于 2015-02-25T19:45:19.417 回答
13

Client Secret 在 OAuth 1.0 中用于对请求进行签名,因此它是必需的。一些 OAuth2 服务器(例如 Google Web Server API)需要发送客户端密码才能接收访问令牌(来自请求令牌或刷新令牌)。

OAuth 2.0 显着减少了客户端密码的作用,但它仍然传递给使用它的服务器。

于 2012-08-28T16:21:15.947 回答
-3

这也让我发疯,直到我看到一个让答案显而易见的例子。

我必须先登录到服务器,然后服务器才会返回一个授予访问我的东西的令牌。

换句话说,如果我还没有与服务器的有效登录会话,则服务器将向我(人类)显示一个登录屏幕。这就是为什么解释总是说“由服务器进行身份验证”之类的东西。

当然,服务器不必要求我登录。这现实吗?Dropbox 是否真的会将我的文件的访问权限授予未登录的任何人?当然不是。我读过的大多数解释都掩盖了这一点,就好像它无关紧要,而实际上它实际上是唯一重要的事情。

于 2014-02-28T17:10:18.467 回答