oauth-2.0 - 当一个简单的流氓客户端无论如何都可以窃取密码时,Oauth 中客户端密码的目的是什么?
问题描述
这个问题以前没有问过,因为前提不同。
Client secret 用于授权服务器验证用户是否使用ACTUAL 客户端登录系统;不是黑客创建的流氓客户端。
但是,恶意客户端不需要向服务器进行身份验证。如果用户在流氓客户端上提供了他的用户名/密码,那么黑客实际上已经窃取了密码。然后,他可以来到ACTUAL 客户端并使用凭据登录。
我知道我们可以采用两因素身份验证来防止这种情况。但是,我的问题是:如果密码窃取程序并不重要,为什么还要经历 OAUTH 授权/PKCE 流程中提到的客户端验证的所有麻烦?
https://auth0.com/docs/flows/authorization-code-flow-with-proof-key-for-code-exchange-pkce
最后,黑客可以使用网络抓取策略来自动从实际客户端捕获数据。
解决方案
客户端机密根本无法防止未经授权的人员登录,因此不要挂断该威胁。在使用它的 OAuth 流中,为了资源服务器的利益,客户端密码用于不可否认性。有了客户端机密,资源服务器就可以准确地知道哪个客户端(== 应用程序服务器)请求了任何给定的令牌。这样,如果客户端未能正确保护其令牌并代理其用户的请求,以确保滥用或不负责任的最终用户流量永远不会到达资源服务器,则可以确定地识别客户端并撤销其授权. 或者,如果它超过了 SLA 等,它可以是临时的速率限制。问题解决了——对于资源服务器!
推荐阅读
- javascript - 我想获取对象并在课堂上使用它。它在 then 语句中运行良好,但之后它会寻找它不想出现
- angular - TEMP_DATA 值必须相同但它正在改变
- botframework - 是否可以在我的聊天机器人的团队应用程序中禁用输入
- api - 有没有办法在使用 twitter 流时请求更大的参数列表?
- chart.js - Blazor 服务器端 Chartjs
- laravel - 块方法不适用于刀片 Laravel
- c++ - SWIFT Hashable 结构的等效 C++ 结构
- python - sorted() 乘以 -1 不适用于 python 中的字符串数据
- python - 如何在 AWS Sagemaker 中检索分段掩码中使用的标签
- python - 将 docker 容器配置为另一个容器中的环境变量