【问题标题】:Javascript access to Location header's URL fragment for OAuth 2Javascript 访问 OAuth 2 的 Location 标头的 URL 片段
【发布时间】:2012-08-29 14:24:21
【问题描述】:

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]“一个能够访问完整的网页(通常是带有嵌入脚本的 HTML 文档)重定向URI,包括用户代理保留的片段,并提取片段中包含的访问令牌(和其他参数)”。

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

谢谢,
迈克尔

【问题讨论】:

    标签: javascript oauth oauth-2.0


    【解决方案1】:

    试试这样的(取自this german article):

    <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'] 引用您的访问令牌。

    【讨论】:

    • 谢谢。这看起来很有希望。我会试一试的。
    • 像魅力一样工作。 (我的隐式授权实现似乎也运行良好。:))再次感谢。
    • 如果您认为我的回答是正确的,您最好将其标记为已接受。谢谢!
    猜你喜欢
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2021-10-19
    • 2010-09-18
    相关资源
    最近更新 更多