【问题标题】:Windows Live API oauth 2. Reading a query string that contains page.aspx?#access_token=fhuevhkfu3q9Windows Live API oauth 2. 读取包含 page.aspx?#access_token=fhuevhkfu3q9 的查询字符串
【发布时间】:2012-05-23 16:21:46
【问题描述】:

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

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

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

accessToken = Request.QueryString["access_token"];

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

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

谢谢

【问题讨论】:

    标签: c# asp.net oauth-2.0 request.querystring windows-live


    【解决方案1】:

    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 的服务器进行服务器到服务器调用,以将 code 交换为 access_token

    【讨论】:

      猜你喜欢
      • 2016-05-29
      • 2011-05-14
      • 2011-04-21
      • 2011-02-05
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 2023-04-10
      • 2015-06-30
      相关资源
      最近更新 更多