gpt4 book ai didi

java - 基于哈希片段的安全性到底是如何工作的?

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:17 26 4
gpt4 key购买 nike

我正在学习 OAuth 2.0,但无法获得在隐式授权流程 中保护访问 token 的方法。规范中有一些论点和一些看起来相互矛盾的 upvoted SO 答案。有人可以清理一下吗? SO 答案和规范中的引述让我感到困惑:

  1. (来自规范)用于将访问 token 传递给客户端的重定向 URI。这访问 token 可能会暴露给资源所有者或其他人有权访问资源所有者的用户代理的应用程序。
  2. (来自规范)访问 token 凭据(以及任何 secret 访问 token 属性)必须在运输和存储过程中保密,并且仅在授权服务器、资源服务器之间共享访问 token 对哪些客户端有效,以及访问 token 所在的客户端发布。访问 token 凭据必须仅使用 TLS 传输。
  3. (来自 accepted and upvoted SO answer)在隐式流程中,访问 token 作为散列片段传递,只有浏览器知道散列片段。浏览器会将哈希片段直接传递到目标网页/客户端网页的重定向 URI(哈希片段不是 HTTP 请求的一部分),因此您必须使用 Javascript 读取哈希片段。哈希片段不能被中间服务器/路由器拦截(这很重要)。

我的问题:

P1 表示 token 通过重定向 URI 传递给客户端,P2 表示传递 channel 必须是 TLS-ed。但是 P3 说哈希片段没有发送到网络。如果访问 token 因为它是散列片段而不发送,它如何到达客户端?无论如何,它必须通过网络发送,不是吗?或者在没有网络交易的情况下使用重定向 URI 发送 token 会产生一些魔力?

唯一可能的解释 - 在引擎盖下,浏览器仅通过网络发送 url 的非哈希部分,并且在加载新页面后,仅插入哈希片段并使其可用于 JS。如果我是对的,我仍然不明白为什么我们不简单地发送带有可靠、安全的 HTTPS channel 作为响应参数的 token ?

最佳答案

OAuth 提供者使用 HTTP 响应重定向将访问 token 发送回 OAuth 消费者:

HTTP/1.1 302 Found
Location: https://consumer.org/redirect_uri#access_token=1111-2222-3333-4444

请注意访问 token 是如何通过网络发送的,作为来自 OAuth 提供者的 HTTP 响应的一部分,除了消费者之外,它也应该在 HTTPS 上。

然后您的浏览器将向消费者端点执行新的 HTTP GET 请求:

GET /redirect_uri HTTP/1.1
Host: consumer.org

请注意访问 token 是如何不通过网络发送给消费者的。 consumer.org 的服务器将不会收到此 HTTP 请求中的 token 。相反,从 https://consumer.org/redirect_uri 返回的网页将包含能够并且将从 url 片段中读取访问 token 的 javascript。

因此,您需要信任从 consumer.org 收到的 javascript 代码(通过使用 HTTPS),因为如果攻击者可以注入(inject)代码,它也可以间接获取访问 token (并将其发送到任何地方)。

来自消费者的 HTTP 响应示例:

200 OK
Content-Type: text/html

<html><head><script>
alert(window.location.hash)
</script>
</head><body></body></html>

关于java - 基于哈希片段的安全性到底是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25765619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com