我的問題恰恰是,「如何令牌驗證信息的WebAPI側管理?」實施JWT認證在Asp.net的WebAPI
即
一)每個用戶是否有唯一的密鑰?
B)如果是,這些存儲在哪裏?
C)有人說,關鍵是每個會話新鮮產生:O ??
我指定我怎麼覺得這是必須要做的還是可以做到的。
1)應用程序發送用戶名和密碼登錄阿比的WebAPI的(部分)。
2)Api驗證來自數據庫的憑據並創建JWT。
3)創建一個標準頭說頭= { '類型': 'JWT', 'ALG': 'HMAC'}。
4)然後創建索賠/有效負載部分,並將該用戶的唯一標識符嵌入到其中。
5)然後(header.claims)被Base64URLEncoded並送入這需要對這類已編碼的信息和祕密密鑰作爲參數,並使用HMAC算法(比如說)標記它的方法。
6)現在頭部,聲明,簽名(在前面的步驟中獲得)與句點連接,我們得到一個JWT。
7)此JWT被髮送回應用程序。
8)在下次請求期間,應用程序在嘗試訪問資源時將此JWT發送回WebApi。
9)WebApi檢查智威湯遜和解碼頭,聲稱它。
10)WebApi從聲明中獲取唯一用戶標識符,並檢查該用戶是否存在於數據庫中。
11)如果找到用戶,它將獲得與用戶相關聯的密鑰,這個密鑰也存儲在數據庫中,並對用戶提供。 (可能僅僅是註冊時生成的GUID)
12)它檢查令牌是否過期。這個信息在索賠/有效載荷中可以看作'exp'日期時間或其他。
13)假設令牌還沒有到期,需要的WebAPI的首部加上索賠/有效載荷,並再次產生它沒有使用密鑰之前時間的JWT方式相同。
14)創建的JWT與App發送的JWT匹配。如果兩者都匹配(簽名),那麼令牌是正確的並且沒有脾氣,並且確實由WebApi發給該用戶。
15)WebApi設置聲明標識並允許訪問資源。
現在每天尋找數據庫的用戶標識時間,而不是,該的WebAPI也只是維護用戶的靜態數組,因爲他們登入保持他們的祕密密鑰了。所以它只能從這個數組中獲取信息。當用戶註銷時,用戶也會從靜態數組中移除(陣列管理不是我現在想要進入的)
這只是我關於實現它的思考方式。
我想知道我有多少偏離了它的做法,否則呢?我不想創建一個單獨的授權服務器。我希望WebApi能夠以一種簡單而安全的方式管理這一點。我將使用Microsoft JwtSecurityTokenHandler進行.Net 4.5創建,驗證JWT。