2014-10-18 75 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