6

OAuth 2.0 隐式授权 (http://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-4.2) 涉及客户端应用程序、浏览器和授权服务器之间的一些有趣的编排。身份验证服务器向浏览器返回 HTTP 302 状态代码,并带有如下所示的 Location 标头:

位置:http://clientapp.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA&state=xyz&token_type=example&expires_in=3600

浏览器在执行重定向之前会丢弃片段,clientapp.com/cb 上的服务应该响应 [from the spec]“能够访问完整重定向 URI 的网页(通常是带有嵌入脚本的 HTML 文档),包括用户代理保留的片段,并提取片段中包含的访问令牌(和其他参数)”。

我已经实现了授权服务器部分,但 JavaScript 经验很少。如何让 JavaScript 访问浏览器在重定向之前剥离的片段?

谢谢,
迈克尔

4

1 回答 1

7

尝试这样的事情(取自这篇德国文章):

<script>
   var fragmentString = location.hash.substr(1);
   var fragment = {};
   var fragmentItemStrings = fragmentString.split('&');
   for (var i in fragmentItemStrings) {
     var fragmentItem = fragmentItemStrings[i].split('=');
     if (fragmentItem.length !== 2) {
       continue;
     }
     fragment[fragmentItem[0]] = fragmentItem[1];
   }
</script>

然后,您可以使用 引用您的访问令牌fragment['access_token']

于 2012-09-05T09:42:21.400 回答