簡體   English   中英

從Web API控制器獲取Live SDK訪問令牌

[英]Getting Live SDK Access Token from Web API Controller

我在后端有以下方法,我想獲取通過live sdk登錄的用戶的訪問ID:

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到我的服務器端代碼?

答案將取決於您打算如何使用服務器中的令牌。 如果您只需要撥打幾個快速服務電話,通常只需編寫一些將令牌發送到服務器的JS就足夠了。

如果您要保留令牌超過一個小時,則一切都會改變。 訪問令牌本身將過期,因此您真正需要的是一個可用於獲取長期刷新令牌的身份驗證代碼,而該代碼又可用於獲取短期訪問令牌。

http://msdn.microsoft.com/zh-cn/library/hh243649.aspx上了解有關此內容的更多信息,並在此處查看SDK示例: https : //github.com/liveservices/LiveSDK-for-Windows/tree/主/ src目錄/網絡

首先,您的服務器在重定向中看不到訪問令牌的原因是因為它出現在URL中的“#”之后。 出於安全原因,這是有意的。 盡管所有這些聽起來都很復雜,但實際上它是OAuth 2.0的教科書實現,因此,如果您在閱讀該規范時會發現有價值的話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM