OAuth 使用 client_id 和客户端密码进行令牌请求,安全吗?

OAuth using client_id and client secret for token request, is it secure?

您好,我正在学习 api 安全性并正在阅读 material 的 Oauth。我有点困惑如下。

我是客户,使用来自第三方的 api 服务。一旦我作为客户端登录到我的客户端应用程序,稍后我需要访问 api。然后授权过程开始。在第一步中,我需要获取授权码请求,一旦同意并 Oauth 服务器 return 临时授权码,客户端将请求令牌。在此步骤中,客户端将发送带有其他参数的客户端 ID 和客户端密码。假设开发代码或有权访问代码的程序员之一是否知道客户端 ID 以及客户端密码。一旦该开发人员离开公司,那么该客户 ID 和客户机密将如何受到保护?有了client id和client secret就可以轻松访问资源了。

您是正确的,有权访问 client_idclient_secret 的人 - 以及一些奉献精神 - 可能会访问这些资源。请注意,它还需要从用户那里获得授权码,这需要网络钓鱼或其他一些不太困难的攻击。但是,当您拥有客户端凭据时,基本上可以很容易地模拟客户端。

为防止这种情况发生,您可以使用在其他地方使用的技术来防止秘密落入流氓开发人员之手,例如:

  • 定期轮换客户端密码
  • 在某些事件中显式更改客户端密码,例如当有人离开或检测到泄漏时
  • 使用 PKI 解决方案进行客户端身份验证(例如 private_key_jwt),它不需要在提供商端进行任何更改来滚动客户端的 certificate/key,从而使前两种方法更容易(在如果客户端 cert/key 受到威胁)
  • 在生产环境中使用与在开发环境中不同的秘密,并保护生产环境中的秘密不被不应访问的人看到
  • 等等