簡體   English   中英

Asp.net核心2 AuthenticationProperties存儲jwt令牌

[英]Asp.net core 2 AuthenticationProperties storing jwt tokens

我試圖更好地理解如何存儲jwt令牌(id,access,refresh)。 添加OpenIdConnect時,您可以設置的其中一個選項是保存令牌。 使用以下配置,每當用戶登錄時,都會生成jwt令牌(無需單獨調用授權端點來檢索令牌)。

.AddOpenIdConnect("Test", options => {  
                options.SaveTokens = true;
}

根據我的閱讀,它們保存在與ClaimsPrincipal一起返回的AuthenticationProperties集合中。 您可以通過HttpContext.GetTokenAsync檢索它們。

示例如下:

var accessToken = await HttpContext.GetTokenAsync("access_token");

我想了解更多關於如何存儲和檢索這些值的信息。 我知道,claimforelimin是與用戶相關的身份/聲明的集合。 但是如何設置身份驗證屬性? 如何單獨訪問身份驗證屬性集合? 是否有可用於直接訪問類屬性的類/接口? 我沒有在ClaimsPrincial類中看到有關身份驗證屬性的任何信息。

此外,由於訪問令牌存儲在身份驗證屬性中,更新值的唯一方法是重新進行身份驗證(即挑戰用戶再次登錄)? 我該如何更新價值? 或者最好提取值將其存儲在其他位置進行更新?

我自己一直在研究這個問題。 OpenID Connect中間件似乎通常通過SignInScheme選項指定的第二個cookie身份驗證方案將數據保存到已簽名的cookie中。 使用顯式配置的示例擴展您的示例:

.AddOpenIdConnect("Test", options => {  
    options.SignInScheme = "MyCookieScheme";
    options.SaveTokens = true;
}

此示例意味着還使用以下調用設置了cookie身份驗證方案:

.AddCookie("MyCookieScheme")

從SignInScheme的文檔注釋:

獲取或設置與成功驗證后負責持久保存用戶身份的中間件相對應的身份驗證方案。 此值通常對應於Startup類中注冊的cookie中間件。 省略時,Microsoft.AspNetCore.Authentication.AuthenticationOptions.DefaultSignInScheme用作回退值。

(請注意,此屬性實際上來自OpenIdConnectOptions擴展的RemoteAuthenticationOptions類)

跟蹤默認設置方案中您沒有明確提供cookie身份驗證方案的情況有點棘手,但我想它默認設置一個,或依賴於那里的一個。 另外,我想在理論上,任何其他類型的身份驗證方案都可以用於此持久性(例如您自己的JWT發布和簽名方案),但我還沒有看到任何這樣的示例。

至於實際存儲在cookie中的內容以及它是如何通過OpenID Connect中間件放到那里的,你可能需要大量挖掘所有代碼才能確保工作 - 所有這些的具體細節 - 級別的中間件似乎還沒有被記錄。 我所知道的是,DataProtection中間件涉及加密cookie的內容。

您可以考慮解密cookie本身以查看其中的內容 - 請參閱此處的答案: 如何手動解密ASP.NET核心身份驗證cookie?

(哦,為了記錄,所有這些示例都基於ASP.NET Core v2.0)

暫無
暫無

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

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