0

我正在尝试使用 Microsoft Live Connect 进行非常简单的登录,但在解析返回的令牌时遇到问题。我称这个网址为:

https://login.live.com/oauth20_authorize.srf?client_id=MY_CLIENT_ID&scope=wl.skydrive_update&response_type=token&redirect_uri=http%3A%2F%2FMY_SITE.com%2Fcallback.php

它会将我带到 Microsoft 服务器,让我登录,确认权限,然后正确加载回调 URL,如下所示:

http://MY_SITE.com/callback.php#access_token=LOTS_OF_STUFF&authentication_token=MORE_STUFF&token_type=bearer&expires_in=3600&scope=wl.skydrive_update

现在的问题是如何获得这些令牌?我应该如何解析它?他们使用 '#' 而不是 '?'.. 所以 $_GET 为空,$_POST 为空,并且 $_SERVER['REQUEST_URI'] 不显示任何内容。

4

2 回答 2

2

Normally Browsers doesnt send the values after the hash sign to the server. You can process them with JavaScript on the Client side. See: Why the hash part of the URL is not in the server side?

于 2012-11-30T06:09:50.507 回答
0

不幸的是,它们返回一个哈希字符,该字符本应在客户端处理。如果您确实需要使用服务器端脚本 (PHP) 解析值,则可以使用 JavaScript 再次重定向。您可以尝试添加 JavaScript 代码,例如:

  window.onload = function() {
    // redirect if hash is detected
    if(window.location.hash)
    {
      var redirect_hash = window.location.hash.replace('#', '?');
      var redirect_location = 'http://' + document.domain + redirect_uri;
      window.location = redirect_location;      
    }
  }

然后可以在重定向时解析查询字符串值。

于 2012-11-30T06:59:14.583 回答