我想知道为什么OAuth2规范没有定义JSON响应模式来在隐式授权流中返回访问令牌。 是因为没有时间就此达成一致并指明它吗?或者以JSON格式返回访问令牌是否会打开某些安全漏洞?如果是这样,知道哪个(我怀疑通过验证请求的ContentType或RequestedWith标头可以减轻将JSON返回到恶意脚本标签中)会很有趣。
有许多现代javascript应用程序需要刷新访问令牌。当受保护资源的权限经常更改时(例如,当某些用户为其拥有的资源向其他用户授予权限时),通常需要这样做。在这种情况下,每次访问受保护资源时都必须获取访问令牌。
目前OAuth2规范提供了2种响应模式:片段和表单帖子(草稿中)。 片段响应需要重定向,这对用户不友好。也可以将带有方法GET的表单发布到隐藏的iframe中,该iframe将回调到将访问令牌传递给父窗口的javascript代码。但从发展的角度来看,这是一种相当黑客的做法。
通过AJAX请求以JSON格式返回访问令牌会更加清晰,因为它不会危及安全性。
答案 0 :(得分:0)
重定向对于保证访问令牌传递给RP而不是隐式流中的攻击者至关重要。
如果Stack Overflow有一个带有OAuth2隐式授权的REST API,它以一些JSON格式返回令牌,那么我所要做的就是欺骗你去我的一个网页,然后假装成官方Stack Overflow客户端请求您的会话访问令牌(因为您可能已登录)。
SO服务器会使用您的访问令牌(通过CORS)向我返回一些JSON,然后我可以冒充你,你就不会更聪明了。
现在假设您必须进行重定向,可以在JSON令牌中添加参数并将其添加到查询参数中。 但是如果你已经不得不进行查询/片段解析,你也可以从查询/片段中获取参数,而不是强制客户端进行JSON解析。