【问题标题】:OAuth using client_id and client secret for token request, is it secure?OAuth 使用 client_id 和客户端密钥进行令牌请求,它安全吗?
【发布时间】:2021-08-30 04:29:30
【问题描述】:

您好,我正在学习有关 Oauth 的 api 安全性和阅读材料。我有点困惑如下。

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

【问题讨论】:

    标签: oauth


    【解决方案1】:

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

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

    • 定期轮换客户端密码
    • 在某些事件上显式更改客户端密码,例如当有人离开或检测到泄漏时
    • 使用 PKI 解决方案进行客户端身份验证(例如 private_key_jwt),它不需要在 Provider 端进行任何更改来翻转客户端的证书/密钥,从而使前两种方法更容易(如果客户端证书/密钥被泄露)
    • 在生产环境中使用与在开发环境中不同的机密,并保护生产环境中的机密不被不应访问的人访问

    【讨论】:

    • 感谢您的解释和解决方案。代码流 GrantType 有一个客户端密码。但是,如果 OAuth 描述基于浏览器的应用程序无法保密,那么基于浏览器的应用程序不使用代码流并与 client_id 一起工作,那么他们将如何保持客户端 ID 的秘密并让某人很容易窃取。有很多重点是保持令牌的安全,而不是如何根据客户端 ID 或客户端 ID +客户端密码进行授权。
    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2019-11-30
    • 2013-01-23
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    相关资源
    最近更新 更多