Oauth 2.0 OAuth2.0隐式授权流。为什么要使用url哈希片段?

Oauth 2.0 OAuth2.0隐式授权流。为什么要使用url哈希片段?,oauth-2.0,Oauth 2.0,通过查看新的OAuth2.0规范(rfc 6749),我看到隐式授权协议工作流使用Url哈希片段在授权服务器和公共客户端之间交换“访问令牌” 参见规格: 授权授予响应不能作为“查询参数”而不是Url片段发送,保持流的其他部分不变吗 基本上,我无法理解OAuth2的规范作者为隐式授权流授权选择url哈希片段的局限性?隐式授权流是为java脚本客户端完成的,我认为他们使用“#”而不是“?”,不将访问令牌发送到重定向url的服务器端,但仍然可以访问在我们的案例中,作为客户端的javascript可能出

通过查看新的OAuth2.0规范(rfc 6749),我看到隐式授权协议工作流使用Url哈希片段在授权服务器和公共客户端之间交换“访问令牌”

参见规格:

授权授予响应不能作为“查询参数”而不是Url片段发送,保持流的其他部分不变吗


基本上,我无法理解OAuth2的规范作者为隐式授权流授权选择url哈希片段的局限性?

隐式授权流是为java脚本客户端完成的,我认为他们使用“#”而不是“?”,不将访问令牌发送到重定向url的服务器端,但仍然可以访问在我们的案例中,作为客户端的javascript可能出于安全原因“不通过网络共享您的访问令牌可能是不安全的,就像用于重定向URL的令牌一样”

添加我的2美分

从安全角度来看,使用URI片段代替查询参数。 URI段永远不会通过网络发送到重定向url。例如,登录Oauth授权服务器后,位置标头将具有“ur重定向url”#access_token=uraccesstoken,响应代码为302。当浏览器看到302时,它将自动重定向到位置头值(用户代理自动执行此操作,javascript无法停止此操作(afaik))

因为它是一个URI片段,只有重定向url通过网络发送,所以URI片段不是


如果是查询参数,查询参数也将通过网络发送。即使使用TLS,查询参数也将在代理日志中可见,使我们的访问令牌为非预期的人所知,从而导致访问令牌泄漏

谢谢波波!同意你的解释。阅读规范我从未想到重定向到重定向不涉及TLS,这使得令牌容易受到“中间人攻击”,但这带来了一个与授权代码授权流相关的问题。此流要求身份验证服务器在成功验证时发出“代码”,并将用户代理重定向到重定向url以及代码。由于此重定向不涉及TLS,这是否意味着授权“代码”的安全性受到了损害?该代码仅用于一次生成令牌,并且它是必需的客户端ID和客户端密码,因此它是安全的,因为客户端密码不共享,只有客户端系统知道它。@coderVishal Rails是一个服务器端框架。url片段显然没有发送到服务器,因此rails应用程序将无法使用它。这就是授权代码流的用途(顺便说一句,它也更安全)。@coderVishal不用担心,规范很长,经常会让人困惑。我个人从网上课程中受益匪浅,比如Pluralsight。