20200624更新
sorry,上周剛換了電腦,開發工具還沒裝好,導致代碼遲遲沒有上傳!😅😅😅😅😅😅
-------------我是分割線------------
github:https://github.com/yunqian44/Azure.Active.DirectoryB2C.WebApp.git
一,引言
上次關於Azure AD B2C 講到一些概念,有介紹到,Azure AD B2C 也是一種身份驗證的解決方案,但是它運行客戶使用其首選的社交,企業或者本地賬戶標識對應用程序和API進行單一登錄訪問。同樣,Azure AD B2C 使用基於標准的身份驗證協議,包括 OpenID Connect、OAuth 2.0 和 SAML。 它與大多數第三方的 idp 進行集成。今天,介紹如何使用 Azure Active Directory B2C (Azure AD B2C) 在 ASP.NET Web 應用程序中進行用戶登錄和注冊。 應用程序可以使用 Azure AD B2C 通過開放式標准協議對社交帳戶、企業帳戶和 Azure Active Directory 帳戶進行身份驗證。
二,正文
2.1,創建B2C租戶
Azure Portal 左側菜單 點擊“創建資源”,同時搜索框中輸入 “ Azure Active Directory B2C”。

點擊 “創建” 按鈕

選擇 “創建新的 Azure Active AD B2C 租戶”

輸入 “組織名稱”,"域名",“區域”,“資源組”等名稱
Organization name:CnBate B2C
Initial domain name:cnbateb2c

繼續選擇 ”Azure Active Directory B2C “,選擇 ”Link an existing Azure AD B2C to my Azure subscription“ 連接Azure AD B2C租戶到當前自己的訂閱

選擇剛剛注冊的 B2C 租戶,
Resource group :CnBate_RG
點擊 ”create“

將Azure AD B2C 添加到左側菜單,在“所有服務” 搜索框中,搜索“Azure AD B2C” ,將鼠標懸停在搜索結果上,然后在工具提示中選擇星形圖標。 “Azure AD B2C”現在會顯示在 Azure 門戶中的“收藏夾”下。

2.2,注冊應用程序
在門戶工具欄中選擇“目錄 + 訂閱”圖標,然后選擇包含 Azure AD B2C 租戶的目錄,切換成功后,在Azure Portal的左側菜單上選擇 ”Azure AD B2C“,在 Azure AD B2C 頁面選擇 ” 應用程序(舊版)“,點擊 ” 添加按鈕“
-----------------敲黑板了----------------------
(這里先說一下,一定要選擇”應用程序(舊版)“,文章的最后會說明為什么)

輸入應用程序的名稱。 例如,“WebApp”;包含Web應用/Web API和運行隱式流,選擇 ”是“;回復URL,暫時先填寫 ”https://jwt.ms“,因為此時我們還沒有新建ASP.NET Core 的web應用,此地址是用來檢查令牌的,可以用來測試。(截圖里面填寫的 ”http://localhost:9020/sign-oidc“ 是因為我之前運行demo,我自己本地的一個Web應用的地址,所以大家暫時忽略這個)

2.3,創建用戶流
選擇 ”策略“-》"用戶流",點擊 ”新建用戶流“

在“建議”選項卡上選擇“注冊和登錄”用戶流。

輸入該用戶流的名稱 ”B2C_1_signupsignin1“;標識提供者 勾選 ”郵件注冊“;用戶特性和聲明 收集特性和返回聲明勾選 ”姓“,”名“,”城市“,用戶特性和聲明勾選的選項意思是在注冊期間要從用戶收集並發送的聲明和屬性。 例如,“城市”和“姓”,”名“ 所對應的屬性和聲明。

選擇運行流,選擇前面已注冊的名為 WebApp 的 Web 應用程序。

此時,我們可以看到一個標准模板的登錄注冊的頁面,點擊 ”Sign up now“,進行注冊。

輸入有效的電子郵件地址,單擊“發送驗證碼”,輸入收到的驗證碼,然后選擇“驗證代碼”。

查看驗證碼,並且對驗證碼進行校驗,並且輸入相應的 ”姓“,”名“,”城市“,以及 ”登錄密碼“,點擊 ”Create“


令牌將返回到 https://jwt.ms 並顯示出來。
2.4,創建ASP.NET Core Web 應用

安裝:Microsoft.AspNetCore.Authentication.AzureADB2C.UI

需要注冊驗證服務,這個地方默認的是 “AzureADB2C”,AddAzureADB2C方法綁定Azure AD B2C身份驗證終結點,回調地址,租戶所在的自定義域,客戶端Id,以及登錄/注冊,重置密碼,編輯信息的策略Id,其實也就是剛剛在B2C租戶中新建工作流的名稱。

注冊Azure AD B2C 認證服務
services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
.AddAzureADB2C(options=> {
options.Instance = Appsettings.app("Azure_AD_B2C", "Instance");
options.ClientId = Appsettings.app("Azure_AD_B2C", "ClientId");
options.CallbackPath = Appsettings.app("Azure_AD_B2C", "CallbackPath");
options.Domain = Appsettings.app("Azure_AD_B2C", "Domain");
options.SignUpSignInPolicyId = Appsettings.app("Azure_AD_B2C", "SignUpSignInPolicyId");
options.ResetPasswordPolicyId = Appsettings.app("Azure_AD_B2C", "ResetPasswordPolicyId");
options.EditProfilePolicyId = Appsettings.app("Azure_AD_B2C", "EditProfilePolicyId");
});
開啟認證中間件服務
// open authentication middleware app.UseAuthentication();
appsettings.json的配置文件
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"Azure_AD_B2C": {
"Instance": "https://cnbateb2c.b2clogin.cn/tfp",
"ClientId": "39280bbe-bfda-46b8-91c4-f96376f363d9",
"CallbackPath": "/signin-oidc",
"Domain": "cnbateb2c.partner.onmschina.cn",
"SignUpSignInPolicyId": "B2C_1_signupsignin1",
"ResetPasswordPolicyId": "",
"EditProfilePolicyId": ""
}
}
"Instance": "https://<your-tenant-name>.b2clogin.cn/tfp", "ClientId": "<web-app-application-id>", "Domain": "<your-b2c-domain>" "CallbackPath": "/signin-oidc", "SignUpSignInPolicyId": "B2C_1_test", "ResetPasswordPolicyId": "", "EditProfilePolicyId": ""


HomeController=》about 方法加上 [Authorize]
修改項目啟動端口

再回到 Azure Portal,為剛剛注冊的Azure AD B2C租戶里面的WebApp應用設置新的回調地址 “http://localhost:9020/signin-oidc”




大功告成!
三,問題匯總
問題1,B2C 應用注冊可以選擇 “應用注冊”,而不是“應用注冊舊版”嗎?
不可以,Run user flow 中不能選擇 “應用注冊” 里面的應用,目前在中國區B2C使用應用注冊(預覽)支持以下2種類型的account type, 這2種賬號類型是用於devops場景,因此,不應該使用user flow 來驗證這個類型的用戶。因此,Run user flow中不能選擇應用注冊(預覽)里面的應用,這是by design的。
問題2,應用注冊的終結點為什么當前注冊的B2C租戶的域不一致?例如下圖,一個是 com結尾,一個是 “cn”結尾


答,這是azure 中國區的一個bug,我在4月份就反饋過類似的問題,之前他們是把終結點鏈接的域名后綴寫成com了,但是5月份他們更新的時候,應該沒有注意域名后面的當前租戶的鏈接地址

四,結尾
今天的文章大概介紹了如果在我們的Web項目中集成Azure AD B2C,通過使用第三方的社交賬號 “郵箱”進行注冊,登陸。下一篇繼續介紹如何使用Azure AD B2C 保護的API資源。
代碼稍等,我會整理一下,上傳到github中
github:https://github.com/yunqian44/Azure.Active.DirectoryB2C.WebApp.git
作者:Allen
版權:轉載請在文章明顯位置注明作者及出處。如發現錯誤,歡迎批評指正。
