Azure AD B2C(二)使用Azure AD B2C為ASP.NET Core 應用設定社交帳戶(郵箱)登入/註冊
一,引言
上次關於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中
作者:Allen
版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。