我有一个提供API的应用。此应用是OAuth2提供商。
我想使用仅限客户端的应用访问此API(读取和写入)。我正在使用JSO来简化这一过程。
效果很好。
问题是,我不必在任何地方输入我的客户机密(我在我的应用程序中注册的应用程序)。而且我理解为什么,任何人都可以使用它。
所以,如果我可以在没有客户机密的情况下访问我的api,你能解释一下它的用途是什么吗?
答案 0 :(得分:12)
This discussion提供了一个很好的解释,说明为什么客户端密钥对于服务器端应用程序比客户端应用程序更重要。摘录:
Web应用程序[服务器端应用程序]使用客户端机密,因为它们代表了巨大的攻击媒介。让我们说有人中毒一个DNS条目并设置一个流氓应用程序“相似”,这个并置数据可能几个月没有被注意到,这个中介吸收了大量的数据。客户机密被认为可以缓解这种攻击媒介。对于单用户客户端,妥协必须同时使用一个设备,相比之下效率非常低。
答案 1 :(得分:8)
客户端密钥在OAuth 1.0中用于签署请求,因此它是必需的。某些OAuth2服务器(例如Google Web Server API)要求发送客户端密钥以接收访问令牌(来自请求令牌或刷新令牌)。
OAuth 2.0大大降低了客户端密钥的作用,但仍然会为使用它的服务器传递。
答案 2 :(得分:-3)
这也让我感到疯狂,直到我看到一个让答案明显变得明显的例子。
我必须先登录服务器,然后服务器才会返回一个令牌,授予对我的内容的访问权限。
换句话说,如果我还没有与服务器进行有效的登录会话,服务器将使用登录屏幕向我展示人类。这就是解释总是说“由服务器进行身份验证”的原因。
当然,服务器不必要求我登录。这是否现实? Dropbox真的会在没有登录的情况下授予任何人访问我的文件的权限吗?当然不是。我读到的大多数解释都掩盖了这一点,好像它无关紧要,而实际上它是唯一重要的事情。