Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript OAuth2无客户机密–;可能的网络钓鱼?_Javascript_Security_Oauth_Single Page Application - Fatal编程技术网

Javascript OAuth2无客户机密–;可能的网络钓鱼?

Javascript OAuth2无客户机密–;可能的网络钓鱼?,javascript,security,oauth,single-page-application,Javascript,Security,Oauth,Single Page Application,我一直在反复阅读OAuth2规范,但我想不出一件事。没有客户端密码的授权码流(现在推荐用于单页应用程序)不是非常不安全,因为它很容易被用于钓鱼吗?让我解释一下: 客户端将资源所有者重定向到授权服务器,并传递重定向URL和客户端ID 资源所有者批准请求,授权服务器将其重定向到给定的重定向URL并传递授权代码 现在,在现实中,请求授权的客户端是一个钓鱼网站,不幸的是,用户无法识别。传递到授权服务器的重定向URL指向恶意客户端,而不是合法客户端。客户端ID是一个公共信息,因此建立这样的站点相当容易 如

我一直在反复阅读OAuth2规范,但我想不出一件事。没有客户端密码的授权码流(现在推荐用于单页应用程序)不是非常不安全,因为它很容易被用于钓鱼吗?让我解释一下:

  • 客户端将资源所有者重定向到授权服务器,并传递重定向URL和客户端ID
  • 资源所有者批准请求,授权服务器将其重定向到给定的重定向URL并传递授权代码
  • 现在,在现实中,请求授权的客户端是一个钓鱼网站,不幸的是,用户无法识别。传递到授权服务器的重定向URL指向恶意客户端,而不是合法客户端。客户端ID是一个公共信息,因此建立这样的站点相当容易

    如果需要客户端密码,会发生什么情况

  • 恶意客户端将收到授权码,但它不知道合法的客户端密码
  • 资源服务器将拒绝发送访问令牌,因为未提供有效的客户端密码。用户信息是安全的
  • 但是,如果资源服务器不需要客户机密码怎么办

  • 恶意客户端将收到授权码,即使它不知道客户端密码,也会请求访问令牌
  • 资源服务器将接受请求,因为提供了有效的授权码和客户端ID,并且不需要客户端密码。恶意客户端获取访问令牌,用户信息被泄露

  • 我是否遗漏了什么,或者这是正确的,并且没有任何方法可以使OAuth2与单页应用程序一起使用更安全?

    资源服务器不需要
    客户机密钥,因为只有有效的客户机才能获得赎回授权码

    必须根据注册到客户端的
    客户端id
    重定向uri
    对客户端进行验证。注册OAuth客户端时,您应该需要一个允许重定向uri的列表,这些uri允许与
    客户端id一起使用

    因此,如果恶意客户端发出请求,它将无法通过验证,因为只有在允许使用
    redirect\u uri
    时才能重定向


    这在OAuth 2.0 RFC第3.1.2.2节中有详细说明,SPA上的客户端机密也不安全,每个人都可以复制它,正如我们都知道的,错误使用机密可能导致服务器间安全通信的相同机密的2倍,同时为SPA的每个人公开,因此还有为什么不建议在SPA中使用客户端机密