1

我一直在使用 OAuth2 在我的 asp.net 4.0 网站上使用 c# 在后面的代码中提供身份验证技术。我最近注意到 Windows Live api 不再在我编写的代码中工作。它正在拨打电话并从 Live 取回访问令牌,但后来​​我被卡住了。它在它发回的查询字符串的开头添加了一个 #,所以我有以下类型的 url 通过 live 发回给我

...mypage.aspx?#access_token=43t78fehef83jfvwenj3...

以前在添加 # 之前,我只是获取返回的查询字符串并使用以下命令解析出访问令牌。

accessToken = Request.QueryString["access_token"];

随着哈希的添加,尽管我无法再获得该查询字符串,因为哈希使页面误以为它是一个锚点。当我检查我的调试局部变量时,我总是会得到一个空的查询字符串,并且还没有弄清楚如何得到它来给我实际的字符串,以便我可以解析它以获得访问令牌。

关于如何获取查询字符串的任何想法?

谢谢

4

1 回答 1

0

URL 哈希片段(在 之后的部分#)不会从用户代理浏览器发送到 Web 服务器。因此,您需要一些客户端(可能是 JavaScript)代码来解析它并将其发送到您的服务器。

下面是一些简单的代码,它解析哈希片段参数并将它们放入 JavaScript 数组中:

// parse the query string
// from http://oauthssodemo.appspot.com/step/2
var params = {}, queryString = location.hash.substring(1),
    regex = /([^&=]+)=([^&]*)/g, m;
while (m = regex.exec(queryString)) {
  oauthParams[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
}

然后,您可以使用 AJAX 或其他技术将这些值传递回您的 Web 服务器,如果您需要访问令牌服务器端,您可以将它们解析出来。

当然,如果您的所有代码都是服务器端的,您还可以使用 Windows Live 中提供的授权代码流程:

http://msdn.microsoft.com/en-us/library/live/hh243647.aspx#authcodegrant

这允许您在主查询字符串 () 中获取授权代码,?code=foo然后从您的服务器到 Microsoft 的服务器进行服务器到服务器调用,以将其交换codeaccess_token.

于 2012-05-28T18:32:52.690 回答