Blazor Server App 驗證與授權

本文討論與記錄『Blazor Cookie-Base 驗證』。

從結論開始

本文討論與記錄『Blazor Cookie-Base 驗證』。

Blaozr 的登入框架以ASP.NET Core登入框架為基礎。也就是要有ASP.NET Core登入框架的前置知識。

在驗證(Authenticate)部份全部使用ASP.NET Core登入框架,但是只能在Page(.cshtml檔)處理驗證。不能在元件(.blaozr檔)處理驗證這產生了點隔閡,要花心思調校登入程序縮小隔閡。

在授權(Autorize)部份有相應設計,還滿好用易用的。

circle-exclamation

Identity 驗證 vs Cookie-Base 驗證

Identity 驗證

  • 特性:已是成品。UI與DB與程式碼都寫好了。

  • 優點:功能完整且強大,只要知道怎麼用即可。

  • 缺點:不易改寫程序,因為東西很多。

  • 適用:網站自己獨立的認證系統就很方便。

  • 其他:網路上文章很多。實作基礎仍用到『Auth. Cookie』。

※ 補充文件(未讀收先藏) on 2022-11-24

完整的 identity 認證與授權介紹用於 Razer Page。

Cookie-Base 驗證

  • 特性:全部自己來。

  • 優點:可以很輕量。可以整合外部來的SSO驗證。

  • 缺點:全部自己來,要自己組織完整的流程。

  • 適用:有SSO驗證需求。

此例選『Cookie-Base驗證』,因為SSO驗證比較符合現在的商業環境。

驗證(Authenticate)框架

因為只能在Page(.cshtml檔)處理Authenticate,只好調校登入設計。 有看到文件說是因為SignalR通訊特性下無法處理 Cookie-Base Auth 註冊。

跳過過程…

調校結果原則,驗證三大步驟:

  1. Autheticate

    • 可以在元件(.blaozr)處理。

    • 檢查帳號、密碼、圖形驗證碼等等。

  2. Authorize

    • 可以在元件(.blaozr)處理。

    • 取得登入者的個人與授權資料(AuthUser)。

    • 儲放AuthUser,建議放在Database。 (註:Session因綜多考量已不再使用。)

  3. 註冊Auth-Cookie

    • 只能在Page(.cshtml)處理註冊Auth-Cookie

    • 向browser註冊Auth-Cookie,名稱預設為『.AspNetCore.Cookies』。

    • 用 HTTP GET 送指令,為了安全GET參數用JWT加密包裝。

    • 驗證完成後要重導(returnUrl)頁面。

授權(Autorize)框架

網路上文章很多,首先要決定是 Role base 或是 Polyce base。 指令有:@attribute [Authorize]、、async Task。 最關鍵的部份是:Custom-AuthenticationStateProvider。

AuthenticationStateProvider的功能說明

  • Blazor 認證資料來自 HttpContext.User ,我們不建議直接用。

  • 使用者透過<AuthorizeView />CascadingAuthenticationState使用認證資料。

  • 認證資料送達中間透過AuthenticationStateProvider傳遞,這樣就能上下其手,這樣我們就能加值認證資料。

AuthenticationStateProvider service (引用)

  • Blazor has a built-in service called AuthenticationStateProvider service.

  • This service obtains authentication state data from ASP.NET Core's HttpContext.User.

  • This is how authentication state integrates with existing ASP.NET Core authentication mechanisms.

  • It is this service that is used by AuthorizeView component and CascadingAuthenticationState component to get the authentication state.

  • Don't use AuthenticationStateProvider directly. Use the AuthorizeView component.

  • The main drawback to using AuthenticationStateProvider directly is that the component isn't notified automatically if the underlying authentication state data changes.

※ 補充文件(未讀收先藏) on 2022-11-24

以 ProtectedSessionStorage 為基底(標準答案是以 HttpContext 為基底)確定認證並授權。

Blazor Server Custom Authentication [Blazor Tutorial C# - Part 11]

授權檢查之 Role base vs Policy base

Authorize - Role base

  • 實作比較簡單。指定角色即可。

Authorize - Policy base

  • 特性:可程式化。

  • 較有彈性。

  • 實作很麻煩,繞好幾圈。

關鍵程式碼

加值授權角色 客制 CustomAuthenticationStateProvider 取代預設的 AuthenticationStateProvider

也要註冊 CustomAuthenticationStateProvider 才能有效用。

系統進入點也要改寫用 CascadingAuthenticationState 再包裏一層才能取得授權狀態

授權檢查應用

登入畫面與主程序

Account Service

Signout

Signin

沒圖沒真象

登入授權結果

參考文章

EOF

Last updated