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/