- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在学习 OAuth 2.0,但无法获得在隐式授权流程 中保护访问 token 的方法。规范中有一些论点和一些看起来相互矛盾的 upvoted SO 答案。有人可以清理一下吗? SO 答案和规范中的引述让我感到困惑:
我的问题:
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/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!