我有一个REST API,它接受基本上是匿名的调查响应,即来自未经过身份验证的用户。我的组织希望允许一些(可能是12个)合作伙伴开发客户端应用程序来收集响应并将其发送到api。我希望api验证这些客户端,即验证客户端是我们授权的12个客户端之一。我计划使用OAuth 2“客户端凭据”流程,为每个客户端提供唯一的client_id和client_secret。客户端将使用其client_id和client_secret请求令牌,然后在后续的api调用中使用该令牌。客户端将被要求是https基于服务器的应用程序,可以保持client_secret隐藏 - 即“机密客户端”用于OAuth2规范(https://tools.ietf.org/html/rfc6749#page-14)。
但是client_secret真的可以在客户端凭据流中保密吗?据我了解,传递client_id和client_secret的推荐方法是HTTP Basic auth头中的base64编码值。如果攻击者浏览该客户端应用程序以提交suryvey响应,他不能只使用浏览器开发工具查看base64编码的client_id:client_secret值,解码它,并使用相同的client_id和client_secret构建自己的应用程序吗?
我知道我可以使用CORS将基于浏览器的请求限制为来自12个授权域的请求。所以我想我真的在询问非浏览器攻击,试图冒充其中一个授权客户。
所以我的问题: