簡體   English   中英

Blazor 服務器,API 與 OpenIdDict 並使用自省 - 如何處理訪問令牌?

[英]Blazor Server, API with OpenIdDict and using introspection - What to do with the access token?

我有一個 API 也托管一個 OpenIdDict 令牌端點。 API 沒有任何帶有登錄 forms 的 web 頁面,而是在收到表單帖子的響應中返回訪問令牌。

我以前有一個舊的 AngularJS 前端,它與 API 通信以獲取令牌並將其存儲在客戶端上。 Angular 負責將令牌添加到服務器的每個請求中。

我現在計划使用 Blazor 服務器重建前端。 我希望新的 Blazor 服務器客戶端/前端對 API 令牌端點使用自省。

我的計划是構建一個自定義登錄頁面,在發布后,服務器端將與 API 對話並獲取訪問令牌、刷新令牌等。但我不知道之后將訪問令牌放在哪里,以便它被每當我使用 Authorize 屬性時,都會通過自省 Blazor。 我可以只返回令牌,也許寫一些 javascript 將其保存在某處並將其添加到任何后續的 http 請求中,但這不像 Blazor 服務器解決方案?

我的最新發現是令牌可以“在會話中”存儲在服務器上,並在客戶端上創建“會話標識符”cookie? 可能完全不在這...

當我在 Blazor 服務器中使用身份支持時,在成功登錄后總是會創建一個名為“.AspNetCore.Identity.Application”的 cookie。

我一直在考慮的另一個不太理想的解決方案或解決方法是將 API 的 OpenIdDict 設置代碼復制到 Blazor 服務器項目並將它們指向同一個數據庫。

這里的任何幫助將不勝感激!

我的計划是構建一個自定義登錄頁面,在發布后,服務器端將與 API 對話並獲取訪問令牌、刷新令牌等。但我不知道之后將訪問令牌放在哪里,以便它被每當我使用 Authorize 屬性時,都會通過自省 Blazor。 我可以只返回令牌,也許寫一些 javascript 將其保存在某處並將其添加到任何后續的 http 請求中,但這不像 Blazor 服務器解決方案?

您可以將訪問令牌存儲在本地存儲中,並在您想使用它時檢索其值。 是的,它是 Blazor 服務器解決方案。 這就是你應該這樣做的方式。

當我在 Blazor 服務器中使用身份支持時,在成功登錄后總是會創建一個名為“.AspNetCore.Identity.Application”的 cookie。

這是真實的。 這是一個聲明還是你在這里問一個問題? 無論如何,我猜這個 cookie 會在它的生命周期結束時被自動刪除。 但是在您的情況下,您必須手動進行; 您必須編寫代碼來檢查訪問令牌是否已過期。 如果您不這樣做,當您嘗試訪問 Wep Api 端點時,您的應用程序將出現問題。 Blazor 中還有授權組件和對象,如果您不管理存儲的訪問令牌,則會錯誤執行,例如,嵌入在 LoginDisplay 組件中的 AuthorizeView 將顯示經過身份驗證的用戶的名稱(因為您從中提取的聲明訪問令牌構成 AuthenticationSateProvider 創建 AuthenticationState 對象的數據),但不檢查訪問令牌的有效性。 但是使用當前訪問令牌訪問您的 web api 將導致異常,因為訪問令牌無效。

我在上面描述了一些應該用數百頁的文字來解釋的東西。 希望你不會很困惑。

這是您開始調查的最佳地點使用 Jwt 令牌身份驗證在 Blazor 服務器應用程序中自定義 AuthenticationStateProvider

希望這可以幫助...

暫無
暫無

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

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