首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Windows QQ 快速登錄原理:IE ActiveX + 非 IE NP 插件雙通道,網頁通過插件讀取本地 QQ 登錄態

     編輯:程式設計綜合問答

現象

PC 端登錄 QQ 客戶端後,打開瀏覽器訪問 QQ 空間/騰訊網等站點,**無需輸入賬號密碼即顯示「快速登錄」頭像**,IE/Chrome/Firefox 均生效,且未啟用顯性瀏覽器擴展。

核心機制:雙插件架構

瀏覽器類型插件類型文件路徑 (典型)接口
IE (含 IE 內核雙核瀏覽器兼容模式)ActiveX 控件`C:\Program Files\Common Files\Tencent\TXSSO\SSOAxCtrlForPTLogin.ocx`COM `IObjectSafety` + 自定義方法 `GetUin()`/`GetPtLoginSig()`
Chrome/Firefox/Edge (非 IE 內核)NPAPI 插件 (舊) / Native Messaging (新)`C:\Program Files\Common Files\Tencent\TXSSO\npSSOAxCtrlForPTLogin.dll` (NPAPI)
或 `C:\Program Files (x86)\Tencent\QQ\Bin\QQExternal.exe` (Native Messaging Host)
NPAPI `NPN_*` / Native Messaging `stdin/stdout` JSON 通信

流程時序

  1. 用戶登錄 QQ 客戶端 → 客戶端將 **加密票據 (PTLogin Sig / uin / skey)** 寫入 **共享內存 / 注冊表 / 本地文件** (如 `C:\Users\xxx\AppData\Roaming\Tencent\QQ\PTLogin\`)。
  2. 瀏覽器打開騰訊域名頁面 → 頁面 JS 檢測插件是否安裝 (`navigator.plugins` / `ActiveXObject`)。
  3. JS 調用插件接口 `GetPtLoginSig()` / `GetUin()` → 插件讀取本地存儲 → 返回票據給 JS。
  4. JS 將票據作為參數構造登錄請求 (`ptui_check_sig`、`ptqrlogin` 等) 發送騰訊後台 → 後台驗證票據有效 → 返回 `Set-Cookie` (如 `uin=o123456; skey=@xxx`)。
  5. 瀏覽器攜帶 Cookie 後續請求 → 實現免密登錄。

關鍵技術細節

  • 共享內存名稱:`Tencent_QQ_SSO_Data_` + PID,結構體含 `uin`、`pt4_token`、`sig`、`expire_time`。
  • Native Messaging Host:Chrome 42+ 棄用 NPAPI,騰訊轉為 `chrome.runtime.connectNative('com.tencent.qq.login')`,Host 進程 (`QQExternal.exe`) 以當前用戶權限運行,讀取 QQ 數據目錄,通過標準輸入輸出 JSON 交換票據。
  • 安全性:票據有效期短 (分鐘級)、綁定域名/Referer、HTTPS 傳輸、同源策略限制只能騰訊域名調用。

開發者啟示:本地應用與網頁免密互通

  1. 本地應用寫入**加密票據**到固定路徑/共享內存/註冊表。
  2. 提供 **Native Messaging Host** (跨瀏覽器標準) 或 **瀏覽器擴展** (Manifest V3 `nativeMessaging` 權限) 讀取票據。
  3. 網頁 JS 調用擴展/Host → 獲取票據 → 發送後台驗證 → 建立會話。
  4. 票據**短效、單向、綁定域名**,避免洩露風險。
  5. QQ 快速登錄是「本地客戶端持有憑證、瀏覽器插件讀取憑證、網頁 JS 交換憑證」三方協作的經典案例。

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