Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 什么';OAuth2中客户端机密的用途是什么?_Security_Api_Authentication_Oauth_Oauth 2.0 - Fatal编程技术网

Security 什么';OAuth2中客户端机密的用途是什么?

Security 什么';OAuth2中客户端机密的用途是什么?,security,api,authentication,oauth,oauth-2.0,Security,Api,Authentication,Oauth,Oauth 2.0,我有一个提供API的应用程序。此应用程序是OAuth2提供商 我想使用客户端专用应用程序访问此API(读写)。我用它来让这更容易 它工作得很好 问题是,我不必在任何地方输入我的客户机密码(我在我的应用程序中注册的应用程序的密码)。我明白为什么,它会对任何人开放 因此,如果我可以在不使用客户机密码的情况下访问api,您能向我解释一下它的用途吗?客户机密码在OAuth 1.0中用于对请求进行签名,因此它是必需的。一些OAuth2服务器(如Google Web Server API)要求发送客户端密码

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

我想使用客户端专用应用程序访问此API(读写)。我用它来让这更容易

它工作得很好

问题是,我不必在任何地方输入我的客户机密码(我在我的应用程序中注册的应用程序的密码)。我明白为什么,它会对任何人开放


因此,如果我可以在不使用客户机密码的情况下访问api,您能向我解释一下它的用途吗?

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


OAuth 2.0大大减少了客户机机密的作用,但它仍然会传递给使用它的服务器。

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

我必须先登录服务器,服务器才会返回允许访问我的物品的令牌。

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

当然,服务器不必要求我登录。这现实吗?Dropbox真的会授予任何不登录的人访问我的文件的权限吗?当然不是。我读过的大多数解释似乎都忽略了这一点,而实际上这是唯一重要的事情。

很好地解释了为什么客户端机密对于服务器端应用比客户端应用更重要。摘录:

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


好的,所以不传递它不是一个安全问题吗?只要你正在交谈的OAuth服务器不需要它,那么就不用担心它。问题是,OAuth服务器是我的,所以我总是有机会搞砸^^。但因为我用的是门卫,这似乎是一个很好的宝石,我不会担心它。我仍然想更好地理解为什么它不再被真正使用,但仍然存在……我正在查看RFC并在文档中搜索“客户机密”一词,其中有3到6个引用该词,但没有一个解释为什么使用它。似乎没有必要通过它?我也对客户的秘密感到困惑。在本文档[1]中,他们将其称为随机字符串。这真的就是一个随机字符串吗?我找不到任何关于如何或如何生成客户端密码的参考。[1] 我认为你混淆了客户的秘密和身份验证码。后者在用户授予权限后返回(无论该权限是如何实现的)。然后使用它来请求访问令牌。请参见,这没有任何意义。客户机密有什么好处?黑客只需分解应用程序即可获得客户端机密。对于Web服务器应用程序,它将存储在Javascript Http调用中。