我正在学习OAuth 2.0,无法在隐式授权流程中获得保护访问令牌的方法。规范中有一些论文和一些看起来相互矛盾的SO答案。有人可以清理一下吗?来自SO答案和规范的引言令我感到困惑:
我的问题:
P1表示通过重定向URI和P2传递给客户端的令牌表示传递通道必须是TLS编辑的。但是P3说哈希片段没有发送到网络。如果访问令牌没有发送,那么它是如何到达客户端的,因为它是哈希片段?无论如何,它必须通过网络发送不是吗?或者使用重定向URI发送令牌可以在没有网络交易的情
唯一可能的解释 - 在引擎盖下浏览器仅通过网络发送url的非哈希部分,并且在加载新页面之后,只需插入哈希片段并使其可用于JS。如果我是对的,我仍然无法理解为什么我们不使用可靠,安全的HTTPS通道作为响应参数发送令牌?
答案 0 :(得分:10)
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>