我正在学习OAuth 2.0,无法获得 隐式授权流程 中保护访问令牌的方法。规范中有一些论点,有些被推崇的SO答案看起来彼此矛盾。有人可以解决吗?SO答案和规范引述让我感到困惑:
我的问题:
P1说通过重定向URI传递给客户端的令牌,P2说传递通道必须是TLS版本的。但是P3表示 哈希片段没有发送到网络 。如果访问令牌由于其哈希片段而未发送,则如何到达客户端?无论如何,它必须通过网络发送,不是吗?还是发送带有重定向URI的令牌会使网络交易变得有些神奇?
唯一可能的解释- 在后台浏览器仅通过网络发送url的非哈希部分,并且在加载新页面后,只需插入哈希片段并将其提供给JS。如果我是对的,我仍然不明白为什么我们不简单地使用 可靠,安全的HTTPS通道 作为响应参数来发送令牌?
OAuth Provider通过HTTP响应重定向将访问令牌发送回OAuth使用者:
HTTP/1.1 302 Found Location: https://consumer.org/redirect_uri#access_token=1111-2222-3333-4444
请注意,作为来自OAuth Provider的HTTP响应的一部分,访问令牌是如何通过网络发送的,除使用方外,ALSO还应位于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://consumer.org/redirect_uri
因此,您需要信任从Consumer.org(通过使用HTTPS)接收到的javascript代码,因为如果攻击者可以注入代码,它也可以间接获取访问令牌(并将其发送到任何地方)。
使用者的HTTP响应示例:
200 OK Content-Type: text/html <html><head><script> alert(window.location.hash) </script> </head><body></body></html>