1

我在嘗試基於他們的HID卡值對用戶進行身份驗證的PoC。我沒有給讀者任何特定的API。讀卡器通過鍵盤模擬輸出卡的普通數字。在Windows應用商店應用中閱讀HID代理卡

PoC允許用戶通過用戶名/密碼或通過HID代理卡進行認證。爲了簡化事情,我想用隱藏的TextBox來讀取HID的值,並從TextChanged事件中觸發相應的web服務。

我無法這樣做。任何人都可以建議如何做到這一點,我對.Net環境很陌生。

+0

通過'HID卡值',你的意思是序列號?或者你的意思是通過YubiKey之類的東西?如果它像YubiKey一樣,鍵盤直接通過鍵盤輸入,所以你只需要鉤住核心窗口的KeyDown事件(或KeyUp),然後解析所有的值。 –

+0

@NateDiamond通過HID卡值我的意思是存儲在卡中的任何識別信息。我想知道我是否可以保留一個隱藏的文本框併爲其填充卡的值。 – Anupdas

+0

您能否提供閱讀器設備的名稱和製造商? –

回答

2

使用該版本的閱讀器設備(具有鍵盤仿真功能的設備),您將需要某種形式的文本輸入控件(例如文本框)來捕獲虛擬鍵盤發送的文本。您使用隱藏文本框的方法存在的問題是,當虛擬鍵盤「鍵入」卡ID時,它不會獲得焦點。

因此,您需要截取KeyDown事件中的任何UI元素的焦點,而您期望卡ID。例如,如果你有一個窗口,沒有文本框(或其他元素消耗按鍵事件)已經關注的焦點,你可以嘗試在窗口級別攔截KeyPress事件:

<Window ... 
    KeyDown="onKeyDownHandler" 
> 

相應的處理方法會是什麼樣子這:

private void onKeyDownHandler(object sender, KeyEventArgs e) { 
    // e.Key will give you the pressed key 
} 

所以使用這個處理程序,你應該能夠收集由RFID閱讀器發送的所有虛擬按鍵。所以你需要做的就是收集它們並將它們翻譯成字符。


UPDATE:

product leaflet表明讀者的虛擬鍵盤版本可配置之前和卡ID後添加按鍵。因此,即使焦點位於用戶名或密碼的文本輸入字段上,您可能能夠檢測並屏蔽從該RFID閱讀器發送的輸入,方法是在卡ID之前添加不能出現在用戶名/密碼中的字符/控制鍵碼。然後,您可以在兩個文本框中截取KeyDown事件,並且在接收到該控制鍵碼時,您可以使用虛擬鍵盤發送的所有擊鍵。通過用e.Handled = true;標記這些擊鍵,您應該可以將它們從文本框中隱藏起來。

或者,您可以使用該閱讀器的串行版本(例如USB虛擬COM端口)。如果這是一個選項...您可以通過串行連接而不是虛擬鍵盤接收卡號。因此,您可以輕鬆地區分用戶輸入和RFID閱讀器輸入,因爲兩者都將通過不同的通信接口到達。

+0

感謝您的回答。我會在嘗試你的建議後更新。登錄頁面有一個用戶名/密碼'TextBox'。即使它們中的任何一個都有焦點,也不希望在掃描時顯示卡上的字符。理想情況下,我想創建一個可以啓動/停止的CardReader監聽器,以及一旦掃描卡片後提供卡值的回調。 – Anupdas

+0

在這種情況下,您可能需要考慮使用該閱讀器的其他版本(不能用作虛擬鍵盤但使用(虛擬)COM端口的閱讀器)。使用虛擬鍵盤類型閱讀器,您無法真正區分手動輸入的用戶名/密碼和虛擬類型的卡ID,因此您需要讓用戶切換到監聽卡ID的單獨屏幕。 –

+0

唯一的麻煩就是他必須爲它創建一個自定義驅動程序(假設製造商不提供使用WinUSB.sys的根認證簽名驅動程序)。它似乎確實有一個序列版本,所以可以肯定地工作。 –