Javascript 访问 OAuth 2 的 Location header 的 URL 片段

标签 javascript oauth oauth-2.0

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

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

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

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

谢谢,
迈克尔

最佳答案

尝试这样的事情(取自 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'] 引用您的访问 token 。

关于Javascript 访问 OAuth 2 的 Location header 的 URL 片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12271736/

相关文章:

ios - OAuth2 "social login"流程(允许通过 Facebook/Twitter 进行 OAuth2 身份验证): are there any examples/literature?

JavaScript,数组A长度为0但A[key]有值

ios - iOS 应用程序上的 OAuth2 加载 uiwebview 让用户接受连接

oauth-2.0 - 如何在 Rust 中使用 google_speech1 发送语音到文本请求?

powershell - 由于组策略,Powershell脚本 'Basic Authentication'无法在服务器VM上运行。我如何使用OAuth绕过此

c# - 在 .NET 中使用 OAuth2.0 两条腿的方法访问 Jira API

google-app-engine - 如何在 Google Go 中为 QuickBooks API 调用正确添加 OAuth header

javascript - 按照以下格式对 extjs4 中的文本字段进行验证检查?

javascript - AngularJS 中的 lightGallery(jQuery 插件)

javascript - 使用 JavaScript 输出声音