2016-08-22 105 views
0

我的問題恰恰是,「如何令牌驗證信息的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。

回答