Windows Live API oauth 2.读取包含 page.aspx?#access_token=fhuevh

本文关键字:#access token fhuevh aspx page API Live oauth 包含 读取 Windows | 更新日期: 2023-09-27 18:35:18

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

。mypage.aspx?#access_token=43T78FeHEF83JFVWENJ3...

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

accessToken = Request.QueryString["access_token"];

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

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

谢谢

Windows Live API oauth 2.读取包含 page.aspx?#access_token=fhuevh

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 服务器,如果需要访问令牌服务器端,可以在 Web 服务器端解析它们。

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

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

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