我用yii2编写了一个rest api并且我正在使用oAuth2,问题是当用户想要登录时,客户端Web应用程序应该发送请求以获取令牌,请求应该包含client_id和secret_key以及用户名和密码,在这种情况下用户可以简单地检查元素和单击网络并查看发布到服务器的参数,这意味着用户可以看到 client_id 和 secret_key。client_id 和 secret_key 是每个应用程序的签名,服务器可以找出女巫应用程序使用的 api。如何处理这个安全问题?
问问题
481 次
1 回答
0
您似乎错过了 OAuth 2.0 的一个关键元素client type。
OAuth 2.0 定义了两种类型的客户端,公共客户端和机密客户端。
机密的
这些是可以保护凭证的客户端。他们完全有可能使用授权码授权类型,从反向通道请求中获取令牌。因为他们使用反向通道来获取令牌,所以他们的凭据永远不会暴露给最终用户(通过用户代理)
上市
无法保护凭据的客户端。例如 SPA 客户端和移动应用程序就属于这一类。
在您的情况下,您似乎有一个公共客户端(似乎在浏览器中基于用户代理的应用程序)。在这种情况下,您应该将您的客户端类型设置为公共客户端。如果不是这种情况,则说明您没有使用来自 Web 应用程序的正确反向通道调用。
此外,使用授权码流的公共客户端可以使用 PKCE 来避免授权码盗窃攻击。相关的 RFC 可以从RFC7636中找到
于 2018-01-20T14:26:31.987 回答