.NET8 Server App 認證試作
登入程序要點
.NET8 採用並新的框架,不過登入認證大體上的流程與 .NET6 是一致的。
更正。.NET8 的登入有關鍵性改變。
在 .NET 8 或更新版本中,改用 AddCascadingAuthenticationState()
。請勿使用 CascadingAuthenticationState 元件,理論上效果相同。實際上有落差!應該是bug。
在 .NET 7 或更早版本中,使用<CascadingAuthenticationState> 元件讓UI可取得授權。
在 NET8 Blazor Web App,HttpContext 只在 page reload 才會更新。
因 NET8 變更授權行為,使得加值授權在某些間隙狀況下會無效!
在 NET6 的 RevalidatingServerAuthenticationStateProvider
已無效,因為它不是 Blazor Server App
補充 on 2024-5-30
在 NET8 Blazor Web App,HttpContext 只在 page reload 才會更新。
嘗試找到的所有方法:Circuit、Middelware、CookieAuthenticationEvents、IHttpContextAccessor 或 RevalidatingServerAuthenticationStateProvider 都無法偵測 Auth cookie 已被手動強製刪除。將會一直保持在登入狀態直到 page reload 才會刷新(囧)。
參考文章 - ASP.NET Core Blazor 驗證與授權 - 針對錯誤進行疑難排解
NET8 授權相關文章
使用新的 AddCascadingAuthenticationState()
方式在UI取授權經測試,用<F5>
刷新UI時會無效 => 404!這應該是bug。測了無數次發現是客製 CustomAuthenticationStateProvider 在<F5>
刷新UI時沒有執行,所以授權不足,然後... 轉到 404 了! (囧) 。不過“正常使用”的話沒有此問題。
在實務上廢除自訂 CustomAuthenticationStateProvider 元件。已採用替代方案了,不過未實在到此範例。
其他差異
差別一:@rendermode
。需明確知道該 page 的 interactive render mode。不同 @rendermode
差別二:新版的 razor page 改成 *.razor
。也可以有條件的鑲入 blazor component。副檔名與 blazor componnet 一樣,這很容易混亂。
不同 @rendermode
的通訊方法完全不同。
Server => SignalR
WebAssemply => WebAPI / JSON
non-interactive => Form Submit
開發環境
平台: .NET8
框架: Blazor Server App (global)
IDE: Visual Studio 2022
Auth with cookie
完整原始碼
Last updated