我一遍又一遍地阅读OAuth2规范,但我无法弄清楚一件事。没有Client Secret(现在推荐用于单页应用程序)的授权代码流程是否高度不安全,因为它可以轻松用于网络钓鱼?让我解释一下:
现在,实际上,请求授权的客户端是一个网络钓鱼站点,但遗憾的是,用户无法识别。传递给授权服务器的重定向URL指向恶意客户端,而不是合法客户端。客户端ID是公共信息,因此设置此类网站相当容易。
如果需要客户端密钥会怎样?
但是,如果资源服务器不需要客户端密钥怎么办?
我是否遗漏了某些内容或者这是否正确无法使用单个页面应用的OAuth2更安全?
答案 0 :(得分:1)
资源服务器不需要client_secret
,因为只有有效的客户才能获得兑换授权代码。
客户端不仅必须针对client_id
进行验证,还必须针对注册到客户端的redirect_uri
进行验证。注册OAuth客户端时,您应该要求允许使用client_id
允许的redirect_uri列表。
因此,如果恶意客户端发出请求,则验证将失败,因为只有在redirect_uri
被允许的情况下才必须重定向。
这在OAuth 2.0 RFC第3.1.2.2节https://tools.ietf.org/html/rfc6749#section-3.1.2.2
中有详细说明