第一件事是第一件事 - 去結賬這篇關於authentication with OAuth2.0的文章。根據您的背景,您可能需要閱讀OAuth & OpenID Connect自己。
但是,如果您只是希望將您的服務器端會話保存在經過簽名和加密的JWT中,那也是可以的。在您的智威湯遜,你需要一對夫婦的說法,至少是一些說明:
- 在會話創建時(IAT)
- 多久是誰創建的會話仍然有效(EXP)
- 會議期間,那是你的身份驗證系統(ISS)
- 誰是這屆認證,這是你的用戶ID或東西(子)
之後,您可以添加一個觀衆,最好一個隨機數。但是,如果你正在加密所有你可能會在沒有隨機數的情況下進行加密。
在the OIDC core spec中提及所提出的權利要求通常是一個好主意。
這裏是棘手的地方。你基本上有兩個選擇 - 你可以爲服務器端生成一個字符串,這對所有應用程序都是完全不透明的,併成爲會話。然後提供一個令牌自檢端點,客戶端可以將此字符串發送到並檢索上述索賠(以及您決定映射到會話的所有附加索賠)。這也意味着您將需要一些存儲空間,這些不透明的字符串與用戶聲明一起保存。
另外,你可以簽署(並可以加密)整個束,並通過電線發送。只有當您需要註銷用戶時,您才需要使用令牌的ID。使用私鑰完成令牌簽名,只有您的應用程序知道該私鑰,並且任何客戶端的驗證都是通過公鑰完成的,您的應用程序可以共享這些公鑰,例如,通過提供JWKs端點。
根據你在JWT中的聲明,你可能並不需要加密它......如果你這樣做,那麼是的,你還必須管理加密密鑰。
同時檢查this article可以很好地瞭解令牌認證中的內容。
您是否試圖在您的實現中兼容OAuth2.0/OIDC,還是僅僅使用JWT(與JWS和JWE)保持用戶會話? – ingenious
@ingenious我希望爲用戶提供與Google等OAuth2提供商一起登錄的選項,但現在主要目標是保持用戶會話。 –