Oauth 2.0 使客户端机密可配置

Oauth 2.0 使客户端机密可配置,oauth-2.0,Oauth 2.0,我们有许多相互通信的应用程序。一个应用程序发送给客户,它必须与中央服务器通信以获取特定信息。我们使用OAuth2身份验证,并且已经使用用户名和密码来验证对中央服务器应用程序的访问 我们将OAuth2客户端ID和客户端密码硬连接到客户应用程序中,以便服务器应用程序知道它是与之对话的应用程序的实例。最近,我们被要求让客户可以配置客户ID和客户机密,以便每个客户都有不同的OAuth clientid和客户机密。id和密码将由服务器生成,客户将在安装应用程序时设置id和密码 这是正常的做法吗 它是否增加

我们有许多相互通信的应用程序。一个应用程序发送给客户,它必须与中央服务器通信以获取特定信息。我们使用OAuth2身份验证,并且已经使用用户名和密码来验证对中央服务器应用程序的访问

我们将OAuth2客户端ID和客户端密码硬连接到客户应用程序中,以便服务器应用程序知道它是与之对话的应用程序的实例。最近,我们被要求让客户可以配置客户ID和客户机密,以便每个客户都有不同的OAuth clientid和客户机密。id和密码将由服务器生成,客户将在安装应用程序时设置id和密码

  • 这是正常的做法吗
  • 它是否增加了任何有用的安全价值
  • 特别欢迎参考知名出版物来解决这一问题


    编辑:我们使用的是资源所有者密码流,用户名和密码以及clientId和secret都存储(加密)在客户端应用程序中。安装应用程序的客户将获得提供给他们的用户名/密码/clientid/clientsecret,并且该组合始终用于从客户端应用程序连接到服务器应用程序,无论最终用户登录到客户端应用程序。(如果id/secret/username/password组合被破坏,则可以更改,但更改它的情况可能很少。)这有效地使客户端应用程序的安装成为资源所有者。(这不是我设计的)

    恐怕您的系统使用资源所有者密码流的方式不是正常做法()。当客户端ID、客户端密码、用户名和密码在客户端应用程序中硬连接时,您也可以使用

    将可配置部分添加到硬连线身份验证中,会对以安全的方式向客户提供此新部分提出挑战。另一方面,它为您提供了撤销单个客户的身份验证的可能性,以防其受到损害。在配置客户端ID和密码时这样做是不正常的。如果您更改客户端应用程序,以便由客户配置用户名和密码,您将更接近标准的资源所有者密码流。此流程是正确的,但在您的情况下可能是正确的()

    通过执行此步骤,资源不再由客户机拥有,而是由一组客户拥有,客户可以从该组中排除

    另一种方法是更改客户端凭据流,并使客户端ID和密码可配置。这样,客户机将显示为不同的客户机。效果几乎相同


    总结一下,您有两组凭据(客户端ID:secret和用户名:password)。如今,这两种方法都能识别客户。不管怎样,您都可以添加识别客户的功能。

    恐怕您的系统使用资源所有者密码流的方式不是正常做法()。当客户端ID、客户端密码、用户名和密码在客户端应用程序中硬连接时,您也可以使用

    将可配置部分添加到硬连线身份验证中,会对以安全的方式向客户提供此新部分提出挑战。另一方面,它为您提供了撤销单个客户的身份验证的可能性,以防其受到损害。在配置客户端ID和密码时这样做是不正常的。如果您更改客户端应用程序,以便由客户配置用户名和密码,您将更接近标准的资源所有者密码流。此流程是正确的,但在您的情况下可能是正确的()

    通过执行此步骤,资源不再由客户机拥有,而是由一组客户拥有,客户可以从该组中排除

    另一种方法是更改客户端凭据流,并使客户端ID和密码可配置。这样,客户机将显示为不同的客户机。效果几乎相同


    总结一下,您有两组凭据(客户端ID:secret和用户名:password)。如今,这两种方法都能识别客户。通过这种或那种方式,您可以添加识别客户的功能。

    将机密硬编码到应用程序中不是最佳做法,对这些机密进行加密只会将问题转移到加密密钥上;有一个规范可以解决您的“动态客户机”用例,称为OAuth 2.0动态客户机注册

    将机密硬编码到应用程序中并不是最佳做法,对这些机密的加密只会将问题转移到加密密钥上;有一个规范可以解决“动态客户机”用例,称为OAuth 2.0动态客户机注册

    我说的对吗,资源所有者不是客户机?这意味着检索到的信息不取决于客户端ID,而是取决于通过客户端进行身份验证的用户。您使用的是哪种oauth-2.0流?编辑成问题。我说的对吗,资源所有者不是客户机?这意味着检索到的信息不取决于客户端ID,而是取决于通过客户端进行身份验证的用户。您使用的是哪种oauth-2.0流?编辑到问题中。客户在客户端应用程序中输入用户名/密码/客户端ID/密码。我已经更新了问题中的描述,以澄清这一点。客户确实在客户端应用程序中输入了用户名/密码/clientid/secret。我已经更新了问题中的描述来说明这一点。