利用Day12建立好的ASP.NET CORE環境來測試, 首先新增一個View的資料夾
在Views目錄下, 新增一個MVC View Start Page, 檔名採預設如下所示
一樣在Views目錄下, 新增一個MVC View Import Page, 檔名採預設如下所示
在_ViewImports.cshtml加入底下程式碼,
...
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
...
接下來在View的資料夾下載新增一個Shared資料夾
新增一個_Layout.cshtml檔案
在_Layout.cshtml加入底下程式碼, 而_Layout.cshtml可以視作樣板, 每一個View都會套用這個設定, 類似WEB FORM的MaterPage, 而@RenderBody(), 就是可以拿來客製的內容
View設定完成後, 接著設定Controller, 在Controllers的目錄下, 新增一個AppController.cs
打開AppController.cs如下, 在預設Index()會回傳一個View到前端, 接下就是要建Index的View
回到View的資料夾, 再新增一個App的資料夾, 並新增Index.cshtml如下圖所示
打開Index.cshtml
再來就是試跑看看Index Page是否能正常執行? 到根目錄下找到project.json, 並打開來, 加入底下紅框的參考
...
"Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.1",
"Microsoft.AspNetCore.StaticFiles": "1.0.1",
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.1",
"Microsoft.AspNetCore.Authentication.OpenIdConnect": "1.0.1"
...
到根目錄下找到Startup.cs, 找到Configure函式修改如下
接著到專案屬性的Debug頁籤, 設定起始位置, 如下圖所示
測試成功如下圖,
接著到App目錄下新增一個About.cshtml的MVC View Page, 用來測試頁面授權
打開About.cshtml, 輸入底下程式碼
再來回到Startup.cs, 設定Azure Active Directory B2C 相關配置, 先加入底下Namespace
...
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
using Microsoft.IdentityModel.Tokens;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Http;
...
接著設定靜態字串的連接參數
到ConfigureServices注入認證服務, 如下所示
...
services.AddAuthentication(sharedOptions => sharedOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme);
...
新增一個CreateOptionsFromPolicy函式如下, 等等在Configure函式裡叫用
到Configure函式新增底下程式碼
...
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(CreateOptionsFromPolicy(SignUpPolicyId));
app.UseOpenIdConnectAuthentication(CreateOptionsFromPolicy(SignInPolicyId));
...
最後到AppController.cs, 新增底下程式碼, 完成之後編譯一下專案看有無任何錯誤
按下Debug, 點選About, 測試是否會因設定了[Authorize]的宣告進入驗證畫面
進入驗證畫面如下
一旦驗證便會導回About頁面如下, 此時就可以看到名字有被抓到, 然後Log Out也出現, 到這邊應該算是大功告成
等等好像漏測了甚麼? 應該拿自己建的Azure Active Directory B2C來試一下,
回到Startup.cs將Tenant與clientId, 換成自己的版本, 立馬測試一下
結果按下About, Sign in, Sign out都是畫面閃一下, 有連到驗證網址如下, 但是沒有驗證畫面
當下覺得被玩了, 又要打怪, 這隻怪花了我足足三天, 然後是因為自己英文太爛沒注意到, 英文真的很重要, 很重要, 很重要對程式猿或是攻城獅來說, 解法在底下網站
https://azure.microsoft.com/zh-tw/resources/samples/active-directory-dotnet-webapp-openidconnect-aspnetcore-b2c/
最關鍵的一段話, 真是有看沒有懂系列之一
後來靜下心想, 不會是在Azure Portal做設定吧, 回到Application設定如下
之後再跑一次站台, 成功畫面如下
本文與Source Code主要參考
https://docs.microsoft.com/en-us/aspnet/core/tutorials/
https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect-aspnetcore-b2c
後記: 透過這個實測, 大概對ASP.NET Core開發方式有點概念了, 跟WEB FORM真的是大相逕庭, 而且沒想到最後還被ASP.NET Core出了個暗招