2014-10-18 72 views
0

我在后端下面的方法,我想获得用户的访问ID谁通过直播SDK登录:从网络API控制器获得现场SDK访问令牌

public class AccountController : ApiController 
{ 
    [HttpGet] 
    [Route("Account/Authenticate/LiveUser")] 
    public void AuthenticateLiveUser() 
    { 
     //TODO: Inspect the request query to get the access token 
    } 
} 

在前端我有以下代码:

<script type="text/javascript"> 
     WL.init({ 
      client_id: '00000000XXXXXXXX', 
      redirect_uri: 'http://XXXXXXXXXXXXX.us/Account/Authenticate/LiveUser', 
      scope: 'wl.signin', 
      response_type: 'token' 
     }); 

     WL.ui({ 
      name: "signin", 
      element: "signin" 
     }); 
     </script> 

我能打开页面上的活招牌,签署和现场服务器,消息如下(从小提琴手看到的)回应道:

HTTP/1.1 302 Found 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Length: 0 
Content-Type: text/html; charset=utf-8 
Expires: Sat, 18 Oct 2014 19:52:24 GMT 
Location: http://XXXXXXXXXXXXX.us/Account/Authenticate/LiveUser#access_token=<<ACCESS_TOKEN>>&token_type=bearer&expires_in=3600&scope=wl.signin%20wl.basic%20wl.emails&state=redirect_type%3dauth%26display%3dpage%26request_ts%3d1413662001911%26response_method%3durl%26secure_cookie%3dfalse&user_id=<<USER_ID>> 
Server: Microsoft-IIS/7.5 
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN" 

注意:上面的重定向转发用户到正确的地址,它包括访问令牌和用户ID,在上面的代码中审查。

不过是去到我的服务器的请求如下,请注意没有访问令牌和用户ID

GET http://XXXXXXXXXXXXX.us/Account/Authenticate/LiveUser HTTP/1.1 
Accept: text/html, application/xhtml+xml, */* 
Accept-Language: en-US,en;q=0.8,ja;q=0.6,zh-Hant-HK;q=0.4,zh-Hant;q=0.2 
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0) 
Accept-Encoding: gzip, deflate 
Host: nsyncservices.us 
DNT: 1 
Connection: Keep-Alive 

让我们回到了一圈,我调试我AuthenticateLiveUser服务处理程序,但没有访问令牌或用户ID,这将允许我访问实时服务。

我在做什么错?我如何获得访问令牌和用户ID到我的服务器端代码?

回答

1

答案将取决于您打算如何处理来自服务器的令牌。如果你只需要做几个快速的服务调用,通常只需编写一些将令牌发送到服务器的JS即可。

如果您想要持续超过一小时的令牌,则所有内容都会更改。访问令牌本身将会过期,所以你真正需要的是一个认证代码,它可以用来获得一个长期的刷新令牌,这个令牌又可以用来获得短期的访问令牌。

了解更多关于这个在http://msdn.microsoft.com/en-us/library/hh243649.aspx这里检查了SDK样本:https://github.com/liveservices/LiveSDK-for-Windows/tree/master/src/Web

FWIW,您的服务器不看到重定向的访问令牌是因为它出现在了“#”后的原因URL。出于安全原因,这是故意的。尽管所有这些听起来很复杂,但它实际上是OAuth 2.0的教科书实现,所以如果您在阅读该规范时可能会发现其价值。

+0

Robert,我跟着在这里找到的例子,几乎到了这封信:http://developer.telerik.com/featured/live-connect-authentication-web/如果我正确地理解了这一点,那么现场SDK应该是照顾很多腿的工作对我来说。 – Alwyn 2014-10-19 02:11:33

+0

我正在复制的示例不适用于离线访问,也存在重定向uri与移动uri不同的问题。所以response_type必须是代码,而不是令牌。 – Alwyn 2014-10-19 07:01:16