簡體   English   中英

使用Microsoft System.IdentityModel.Tokens.Jwt在Asp.net WebApi中實現JWT身份驗證

[英]Implementing JWT authentication in Asp.net WebApi using Microsoft System.IdentityModel.Tokens.Jwt

我的問題恰好是“ 如何在WebApi端管理令牌驗證信息?

A)每個用戶都有唯一的密鑰嗎?

B)如果是,這些存儲在哪里?

C)有人說密鑰是在每個會話中新鮮生成的:

我將具體說明我認為該如何完成或可以完成。

1)應用發送用戶名和密碼登錄Api(WebApi的一部分)。

2)Api從數據庫驗證憑證並創建JWT。

3)創建一個標准標頭,例如header = {'type':'JWT','alg':'HMAC'}。

4)然后創建索賠/凈荷部分,並將該用戶的唯一標識符嵌入其中。

5)然后(header.claims)被Base64URLEncoded並輸入到一個方法中,該方法將這個編碼的信息和秘密密鑰作為參數,並使用HMAC算法對其進行簽名(例如)。

6)現在,標頭,聲明,簽名(在上一步中獲得)與點連接在一起,我們得到了JWT。

7)該JWT發送回應用程序。

8)在下一個請求期間,App嘗試訪問資源時,將此JWT發送回WebApi。

9)WebApi會檢查JWT並解碼回標頭,並向其聲明所有權。

10)WebApi從聲明中獲取唯一用戶標識符,並檢查該用戶是否存在於數據庫中。

11)如果找到用戶,它將獲取與該用戶關聯的密鑰,該密鑰也針對該用戶存儲在數據庫中。 (可能只是注冊時生成的GUID)

12)檢查令牌是否已過期。 此信息可在索賠/有效載荷中以“ exp”日期時間或其他任何方式獲得。

13)假設令牌尚未過期,WebApi將獲取標頭以及聲明/有效載荷,並再次使用以前使用密鑰的方式生成JWT。

14)如此創建的JWT與App發送的JWT相匹配。 如果兩個都匹配(簽名),則令牌是正確的且未回火,並且實際上是由WebApi頒發給此用戶的。

15)WebApi設置聲明身份並允許訪問資源。

現在,WebApi不必每次都在數據庫中查找用戶標識符,而是可以在用戶登錄時僅保留他們的秘密密鑰來維護用戶的靜態數組。 因此,它只能從此數組中獲取信息。 當用戶注銷時,該用戶也將從靜態數組中刪除。(我現在不想進入數組管理)

這只是我考慮實現它的方式。

我想知道我偏離了其他方式有多少? 我不想創建單獨的授權服務器。 我希望WebApi以一種簡單但當然安全的方式來管理它本身。 我將使用Microsoft JwtSecurityTokenHandler for .Net 4.5來創建,驗證JWT。

您的問題在本主題中非常籠統,需要回答很多頁。 請看一下: 使用Owin的ASP.NET Web API 2中的JSON Web令牌,它將回答您的許多問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM