基于散列片段的安全性如何工作?
我正在学习OAuth 2.0,无法在隐式授权流程中获得保护访问令牌的方式。 规范中有一些论文和一些有争议的SO答案看起来相互矛盾。 有人可以清除它吗? 来自SO答案和规范的引用令我感到困惑:
我的问题:
P1表示通过重定向URI和P2传递给客户端的令牌表示传递通道必须是TLS-ed。 但是P3说散列片段没有发送到网络 。 访问令牌如果由于散列片段而未发送,它如何到达客户端? 无论如何,它必须由网络发出是不是? 或者使用重定向URI发送令牌会产生一些不带网络优惠的魔法?
唯一可能的解释 - 在引擎盖下浏览器只发送网址的非哈希部分,并在加载新页面后,插入哈希片段并将其提供给JS。 如果我是对的,我仍然不明白为什么我们不简单地发送具有可靠,安全的HTTPS通道作为响应参数的令牌?
OAuth提供程序使用HTTP响应重定向将访问权限发送回OAuth使用者:
HTTP/1.1 302 Found
Location: https://consumer.org/redirect_uri#access_token=1111-2222-3333-4444
请注意访问令牌是如何通过网络发送的,作为OAuth提供程序的HTTP响应的一部分,除了使用者之外,还应该使用HTTPS。
然后,您的浏览器将对消费者端点执行一个新的HTTP GET请求:
GET /redirect_uri HTTP/1.1
Host: consumer.org
请注意访问令牌如何不通过网络发送给使用者。 consumer.org
的服务器将不会收到此HTTP请求中的令牌。 相反,从https://consumer.org/redirect_uri
返回的网页将包含能够并将从url片段读取访问令牌的JavaScript。
因此,您需要信任您从consumer.org(通过使用HTTPS)收到的JavaScript代码,因为如果攻击者可以注入代码,它也可以间接获取访问令牌(并将其发送到任何地方)。
来自消费者的HTTP响应示例:
200 OK
Content-Type: text/html
<html><head><script>
alert(window.location.hash)
</script>
</head><body></body></html>
链接地址: http://www.djcxy.com/p/47985.html