本篇範例程式,展示如何使用自定義的 PathPermission,進行URL層級身分授權(沒權限的URL,跳至302 Access Denied)。
範例原碼:https://github.com/Clark159/CLK.AspNetCoreLab
範例專案:PathPermissionLab
測試步驟:
- 權限設定於 MockPathPermissionRepository.cs。
- 執行PathPermissionLab專案
- 於Account.Login頁面點擊Login:Clark按鈕,以Clark身分登入。(Clark擁有:「/Home/*」授權)
- 於Home.Index頁面,可以看到按鈕:Home.Add、Home.Remove、Home.Update。
- 依次點選按鈕,允許進入各自的頁面:/Home/Add、/Home/Remove、/Home/Update。(URL層級身分授權)
- 於Home.Index頁面,點擊登出按鈕,回到Account.Login頁面。
- 於Account.Login頁面點擊Login:Jane按鈕,以Jane身分登入。(Jane只擁有:「/Home/Add」授權)
- 於Home.Index頁面,可以看到按鈕:Home.Add、Home.Remove、Home.Update。
- 點選Home.Add按鈕,允許進入頁面:/Home/Add。(URL層級身分授權)
- 點選Home.Remove按鈕,不允許進入/Home/Remove頁面,並跳轉至302 Access Denied。(URL層級身分授權)
- 點選Home.Update按鈕,不允許進入/Home/Update頁面,並跳轉至302 Access Denied。(URL層級身分授權)
本篇範例程式,展示如何使用自定義的 OperationPermission,進行View層級身分授權(沒權限看不到按鈕)、進行Action層級身分授權(沒權限跳至302 Access Denied)。
範例原碼:https://github.com/Clark159/CLK.AspNetCoreLab
範例專案:OperationPermissionLab
測試步驟:
- 權限設定於 MockOperationPermissionRepository.cs。
- 執行OperationPermissionLab專案
- 於Account.Login頁面點擊Login:Clark按鈕,以Clark身分登入。(Clark擁有:Home.Add、Home.Remove、Home.Update授權)
- 於Home.Index頁面,可以看到按鈕:Home.Add、Home.Remove、Home.Update。(View層級身分授權)
- 依次點選按鈕,允許進入各自的頁面:Home.Add、Home.Remove、Home.Update。(Action層級身分授權)
- 於Home.Index頁面,點擊登出按鈕,回到Account.Login頁面。
- 於Account.Login頁面點擊Login:Jane按鈕,以Jane身分登入。(Jane擁有:Home.Add授權)
- 於Home.Index頁面,可以看到按鈕:Home.Add。(View層級身分授權、Home.Update是特地留下來測試用)
- 點選Home.Add按鈕,允許進入Home.Add頁面。(Action層級身分授權)
- 點選Home.Update按鈕,不允許進入Home.Update頁面,並跳轉至302 Access Denied。(Action層級身分授權)
參考資料:
本篇範例展示如何在ASP.NET Core裡,使用OAuth驗證後要求用戶進行註冊,註冊完成才允許登入的身分驗證機制。(已註冊過直接登入)
範例原碼:https://github.com/Clark159/CLK.AspNetCoreLab
範例專案:OAuthToRegisterAuthenticationLab
環境準備:
-
Google OAuth
- 至Google建立專案,並申請OAuth2.0用戶端。(https://console.cloud.google.com/home)
- 於申請OAuth頁面的「已授權的重新導向URI」欄位,輸入https://localhost:44311/Account/Google-OAuth-SignIn
- 於申請OAuth頁面取得ClientId、ClientSecret。
- 將上一個步驟取得的ClientId、ClientSecret,填寫至Startup.cs的AddGoogle程式碼區塊內。
-
Facebook OAuth
- 至Facebook建立應用程式,並申請Facebook登入。(https://developers.facebook.com/apps/)
- 於申請Facebook登入頁面的「有效的 OAuth 重新導向 URI」欄位,輸入https://localhost:44311/Account/Facebook-OAuth-SignIn
- 於設定\基本資料頁面取得ClientId、ClientSecret。
- 將上一個步驟取得的ClientId、ClientSecret,填寫至Startup.cs的AddFacebook程式碼區塊內。
測試步驟:
-
OAuth登入後進行註冊,狀態:用戶資料未註冊
- 於localhost網站的Account.Login頁面點擊LoginByGoogle按鈕,執行Account.ExternalLogin,並開啟Google網站進行OAuth的登入及授權。
- (背景作業)Google完成OAuth的登入及授權後,重新導向至https://localhost:44311/Account/Google-OAuth-SignIn。
- (背景作業)localhost網站將Google回傳的OAuth授權資料,儲存至ExternalCookie,並導頁至Account.ExternalSignIn。
- (背景作業)localhost網站執行Account.ExternalSignIn,使用ExternalCookie的OAuth授權資料,確認用戶沒有註冊資訊後,導頁至Account.Register。
- 於localhost網站的Account.Register頁面,填寫註冊資料後點擊Register按鈕完成用戶註冊後,將用戶資訊儲存至ApplicationCookie並轉頁至Home.Index頁面。(已登入)
- 於localhost網站的Home.Index頁面,可以看到目前登入的用戶資訊。:已登入,使用Google-OAuth。
- 於localhost網站的Home.Index頁面點擊Logout按鈕,進行登出後完成測試。
-
OAuth登入後無須註冊,狀態:用戶資料已註冊
- 於localhost網站的Account.Login頁面點擊LoginByGoogle按鈕,執行Account.ExternalLogin,並開啟Google網站進行OAuth的登入及授權。
- (背景作業)Google完成OAuth的登入及授權後,重新導向至https://localhost:44311/Account/Google-OAuth-SignIn。
- (背景作業)localhost網站將Google回傳的OAuth授權資料,儲存至ExternalCookie,並導頁至Account.ExternalSignIn。
- (背景作業)localhost網站執行Account.ExternalSignIn,使用ExternalCookie的OAuth授權資料,確認用戶擁有註冊資訊後,將用戶資訊儲存至ApplicationCookie並轉頁至Home.Index頁面。(已登入)
- 於localhost網站的Home.Index頁面,可以看到目前登入的用戶資訊:已登入,使用Google-OAuth。
- 於localhost網站的Home.Index頁面點擊Logout按鈕,進行登出後完成測試。
-
Password登入後無須註冊,狀態:用戶資料已註冊
- 於localhost網站的Account.Login頁面點擊LoginByPassword按鈕,執行Account.PasswordSignIn。
- (背景作業)localhost網站執行Account.PasswordSignIn,確認用戶密碼(Hash)後,將用戶資訊儲存至ApplicationCookie並轉頁至Home.Index頁面。(已登入)
- 於localhost網站的Home.Index頁面,可以看到目前登入的用戶資訊:已登入,使用Password。
- 於localhost網站的Home.Index頁面點擊Logout按鈕,進行登出後完成測試。
本篇範例展示如何在ASP.NET Core裡,同時使用Cookie及JwtBearer的身分驗證機制。
範例原碼:https://github.com/Clark159/CLK.AspNetCoreLab
範例專案:CookieOrJwtBearerAuthenticationLab
測試步驟:
-
Account.Login、狀態:未登入
- 點擊GetTokenByPassword按鈕,將會使用Username、Password進行身分驗證,並發放Token回傳。
- 點擊GetUserByToken按鈕,將會使用步驟1取得的Token進行身分驗證,並回傳目前登入的User資料。(authenticationType="JwtBearer")
- 點擊Login按鈕,將會使用Username、Password進行身分驗證,並發放Cookie後轉頁至Home頁面。
-
Home.Index、狀態:已登入
- 進入頁面後,會先顯示目前登入的User資料。(authenticationType="Cookies")
- 點擊GetTokenByCookie按鈕,將會使用Cookie進行身分驗證,並發放Token回傳。
- 點擊GetUserByToken按鈕,將會使用步驟1取得的Token進行身分驗證,並回傳目前登入的User資料。(authenticationType="JwtBearer")
- 點擊GetUserByCookie按鈕,將會使用Cookie進行身分驗證,並回傳目前登入的User資料。(authenticationType="Cookies")
- 點擊Logout按鈕,將會刪除Cookie,並轉頁至Login頁面。
本篇範例使用自定義的Middleware/Handler,展示在ASP.NET Core裡進行身分認證/身分授權的步驟流程。
範例原碼:https://github.com/Clark159/CLK.AspNetCoreLab
範例專案:KernelAuthenticationLab
執行結果:
參考資料: