![](/img/trans.png)
[英]How to properly validate OpenIddict JWT access_token in API?
[英]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.