Java脚本访问Location标头's OAuth 2的URL片段

Javascript access to Location header's URL fragment for OAuth 2

本文关键字:OAuth 片段 URL 访问 脚本 Location 标头 Java      更新时间:2023-09-26

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=示例&expires_in=3600

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

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

谢谢,
Michael

试试这样的东西(取自这篇德语文章):

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