在Alex Bilbie 2014 年11 月的一篇文章中,建议 OAuth 用户在执行资源所有者密码授权调用时不要让客户端发送其凭据 (client_id和)。我理解的想法是,为了让客户端能够将其凭据添加到其请求中,这些凭据必须写入其源代码(通常是 HTML/JS)中,因此可能的攻击者可以访问,然后可以使用它们来对模拟客户端的 API 执行调用。client_secret
在另一篇博文的评论中,作者补充道:
如果我可以查看源代码并复制客户端凭据,则没有什么能阻止我构建自己的应用程序,该应用程序可以针对您的 OAuth 服务进行身份验证,然后调用 API。
建议的解决方法是客户端不应直接调用 API,而是使用瘦代理负责将客户端凭据附加到请求,然后将其转发到 API。
作为一个天真的 OAuth 新手,我不明白为什么这会阻止攻击者执行对我的 API 的调用。如果客户端不必将其凭据添加到其请求中,则没有人这样做。由于代理会自动添加凭据,因此发送到 API 的任何请求都会被视为来自授权客户端。
有人在 Twitter 上向 Alex Bilbie提出了这个问题。这是他的回答:
您将如何保护代理?攻击者不能只是向代理发送请求并愉快地填写秘密吗?
关键是您隐藏了后端的实现细节,因此保留了更多控制权
如果有人能详细说明这个答案,我将不胜感激,因为我看不到我可以从隐藏实现细节中获得什么(安全方面),同时消除客户端对自身进行身份验证的需要。