首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

SNS 社交平台開發實戰:整合 MSN Live Connect 取得好友列表並發送邀請

     編輯:關於ASP.NET

幾乎所有 SNS 網站都需要「邀請站外好友」功能。本文實戰示範如何整合 Windows Live (MSN) OAuth 流程:使用者輸入帳密 → 程式代為向 Live ID 服務申請 Token → 取得聯絡人清單 → 發送邀請 Email。附完整截圖流程與關鍵程式碼片段,同理可擴展至 Gmail、Yahoo、Facebook 等提供商。

整體流程架構

  1. 使用者在本站點擊「邀請 MSN 好友」,輸入 Windows Live 帳號/密碼。
  2. 伺服器端以 HTTPS POST 向 https://login.live.com 發送認證請求 (含 Action=Login, CredType=1 等參數)。
  3. Live ID 回傳加密 Ticket (包含 MBI_KEY, TicketToken)。
  4. 攜帶 Token 呼叫 https://social.msdn.microsoft.com/.../Contacts (或對應 API 端點) 取得聯絡人 XML/JSON。
  5. 解析聯絡人清單 (Email、姓名),呈現勾選介面讓使用者選擇邀請對象。
  6. 使用者確認 → 批次發送邀請 Email (含專屬註冊連結、追蹤碼)。

關鍵程式碼:模擬 Live ID 登入取得 Token

public string GetLiveTicket(string username, string password)
{
    string postData = $"Action=Login&CredType=1&LoginOptions=3&UserName={HttpUtility.UrlEncode(username)}&Password={HttpUtility.UrlEncode(password)}";
    byte[] data = Encoding.UTF8.GetBytes(postData);

    var req = (HttpWebRequest)WebRequest.Create("https://login.live.com/ppsecure/post.srf");
    req.Method = "POST";
    req.ContentType = "application/x-www-form-urlencoded";
    req.ContentLength = data.Length;
    req.CookieContainer = new CookieContainer();
    req.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)";

    using (var stream = req.GetRequestStream()) stream.Write(data, 0, data.Length);
    using (var resp = (HttpWebResponse)req.GetResponse())
    using (var reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8))
    {
        string html = reader.ReadToEnd();
        // 解析 HTML 中的 MBI_KEY, TicketToken (或從 Cookie 取得)
        // 實際需依 Live ID 回傳格式調整正則/解析邏輯
        return ExtractTicket(html, resp.Cookies);
    }
}

取得聯絡人清單

public List GetContacts(string ticketToken)
{
    string url = $"https://social.msdn.microsoft.com/.../Contacts?ticket={ticketToken}";
    // 或使用 Live Connect REST API: https://apis.live.net/v5.0/me/contacts?access_token={token}
    // 需先在 Azure 註冊應用取得 Client ID/Secret,走標準 OAuth 2.0 流程 (更推薦)

    // 以下為直接抓取頁面/舊版 API 示意
    var req = (HttpWebRequest)WebRequest.Create(url);
    req.Headers["Authorization"] = $"Bearer {ticketToken}";
    // ... 解析 XML/JSON 回傳 List { Email, Name, ... }
}

現代化建議:改用 OAuth 2.0 + Live Connect API

上述「代輸入帳密」模式屬 **ClientLogin / Delegated Auth**,微軟已棄用且安全性差。現代做法:

  1. 引導使用者點擊「連結 MSN」→ 導向 https://login.live.com/oauth20_authorize.srf?client_id={id}&scope=wl.basic,wl.emails&response_type=code&redirect_uri={your_callback}。
  2. 使用者在微軟頁面授權 → 回調帶 code。
  3. Server 端用 code 換取 access_token (POST https://login.live.com/oauth20_token.srf)。
  4. 呼叫 GET https://apis.live.net/v5.0/me/contacts?access_token={token} 取得標準 JSON 聯絡人資料。

優點:不接觸使用者密碼、權限可控、Token 可撤銷、符合 GDPR/隱私法規。

擴展至 Gmail / Yahoo / Facebook

  • Gmail:Google People API (OAuth 2.0, scope contacts.readonly)。
  • Yahoo:Yahoo Social API (OAuth 1.0a/2.0, 需 YQL 查詢)。
  • Facebook:Graph API /me/friends (需 user_friends 權限,審核嚴格)。

建議封裝統一介面 IContactProvider,各提供商實作 GetContacts(accessToken),Controller 僅依賴介面,新增管道零修改業務邏輯。

結語

從模擬登入到標準 OAuth 2.0,聯絡人匯入技術已完成世代交替。採用官方 API + OAuth 不僅安全合規,更能獲得穩定、文件完善、長期維護的整合體驗。本文提供的舊版程式碼僅供理解歷史脈絡,新專案請直接採用現代 OAuth 流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved