使用 Microsoft Graph 管理 Azure AD B2C

Microsoft Graph 可讓您管理 Azure AD B2C 目錄中的資源。 Azure AD B2C 資源管理支援下列 Microsoft Graph API 作業,包括使用者、身分識別提供者、使用者流程、自訂原則和原則金鑰。 下列各節中的每個連結都會以該作業的 Microsoft Graph API 參考內對應的頁面為目標。

注意

您也可以以程式設計方式建立 Azure AD B2C 目錄本身,以及連結至 Azure 訂用帳戶的對應 Azure 資源。 這項功能不會透過 Microsoft Graph API 公開,而是透過 Azure REST API 來公開。 如需詳細資訊,請參閱 B2C 租使用者 - 建立

觀看這段影片以瞭解使用 Microsoft Graph API 進行 Azure AD B2C 使用者移轉。

必要條件

  • 若要使用 MS Graph API,並與 Azure AD B2C 租使用者中的資源互動,您需要授與許可權的應用程式註冊。 請遵循註冊 Microsoft Graph 應用程式 一文中的 步驟,建立管理應用程式可以使用的應用程式註冊。

使用者管理

注意

Azure AD B2C 目前不支援目錄物件的進階查詢功能。 這表示在查詢參數中 $count 不支援 、 $search 查詢參數和 Not ( not )、不等於 ( ne ), 和 End with ( endsWith ) 運算子 $filter 。 如需詳細資訊,請參閱 Microsoft Graph 中的查詢參數和 Microsoft Graph 中的進階查詢功能。

使用者電話號碼管理

使用者可以使用簡訊或語音電話 或多重要素驗證 登入 的電話號碼。 如需詳細資訊,請參閱 Microsoft Entra 驗證方法 API

請注意, 清單 作業只會傳回已啟用的電話號碼。 應該啟用下列電話號碼以搭配清單作業使用。

Enable phone sign-in

注意

正確表示的電話號碼會以國家/地區代碼與電話號碼之間的空格儲存。 Azure AD B2C 服務目前預設不會新增此空間。

自助式密碼重設電子郵件地址

使用者名稱登入帳戶 可用來 重設密碼的電子郵件地址。 如需詳細資訊,請參閱 Microsoft Entra 驗證方法 API

軟體 OATH 權杖驗證方法

軟體 OATH 權杖是軟體型數位產生器,可透過驗證器應用程式使用 OATH 時間型單次密碼 (TOTP) 標準進行多重要素驗證。 使用 Microsoft Graph API 來管理向使用者註冊的軟體 OATH 權杖:

身分識別提供者

管理 Azure AD B2C 租使用者中可供使用者流動的識別提供者

使用者流程 (Beta)

設定註冊、登入、合併註冊和登入、密碼重設和設定檔更新的預先建置原則。

使用者流程驗證方法 (Beta)

選擇可讓使用者透過本機帳戶註冊的機制。 本機帳戶是 Azure AD B2C 執行身分識別判斷提示的帳戶。 如需詳細資訊,請參閱 b2cAuthenticationMethodsPolicy 資源類型

自訂原則 (Beta)

下列作業可讓您管理 Azure AD B2C 信任架構原則,稱為 自訂原則

原則金鑰 (Beta)

身分識別體驗架構會儲存自訂原則中參考的秘密,以在元件之間建立信任。 這些秘密可以是對稱或非對稱金鑰/值。 在Azure 入口網站中,這些實體會顯示為 原則金鑰

Microsoft Graph API 中原則金鑰的最上層資源是 受信任的架構金鑰集 。 每個 索引鍵集 至少包含一個 Key 。 若要建立金鑰,請先建立空的索引鍵集,然後在索引鍵集中產生索引鍵。 您可以建立手動秘密、上傳憑證或 PKCS12 金鑰。 金鑰可以是產生的秘密、字串(例如 Facebook 應用程式密碼),或您上傳的憑證。 如果索引鍵集有多個索引鍵,則只有其中一個索引鍵作用中。

信任架構原則金鑰集

信任架構原則金鑰

應用程式

應用程式延伸模組 (目錄延伸模組) 屬性

應用程式延伸模組屬性也稱為目錄或 Microsoft Entra 延伸模組。 若要在 Azure AD B2C 中管理它們,請使用 identityUserFlowAttribute 資源類型和 其相關聯的方法。

每個使用者最多可以儲存 100 個目錄延伸模組值。 若要管理使用者的目錄延伸模組屬性,請在 Microsoft Graph 中使用下列 使用者 API

  • 更新使用者 :若要從使用者物件寫入或移除目錄延伸模組屬性的值。
  • 取得使用者 :擷取使用者目錄延伸模組的值。 屬性預設會透過 beta 端點傳回,但只會透過 v1.0 端點傳 $select 回 。

針對使用者流程,這些擴充屬性是 使用 Azure 入口網站 來管理。 針對自訂原則,Azure AD B2C 會為您建立 屬性,原則第一次將值寫入擴充屬性。

注意

在 Microsoft Entra ID 中,目錄延伸模組是透過 extensionProperty 資源類型和 其相關聯的方法來管理。 不過,因為它們是透過 b2c-extensions-app 不應該更新的應用程式在 B2C 中使用,所以會使用 identityUserFlowAttribute 資源類型和 其相關聯的方法,在 Azure AD B2C 中管理它們。

租使用者使用量

使用取得組織詳細數據 API 來取得目錄大小配額。 您需要新增查詢參數, $select 如下列 HTTP 要求所示:

GET https://graph.microsoft.com/v1.0/organization/organization-id?$select=directorySizeQuota

以您的組織或租使用者識別碼取代 organization-id

上述要求的回應看起來類似下列 JSON 代碼段:

{
    "directorySizeQuota": {
        "used": 156,
        "total": 1250000
    }
}

稽核記錄

如需存取 Azure AD B2C 稽核記錄的詳細資訊,請參閱 存取 Azure AD B2C 稽核記錄

條件式存取

擷取或還原已刪除的用戶和應用程式

刪除的使用者和應用程式只能在過去 30 天內刪除時還原。

如何以程序設計方式管理 Microsoft Graph

當您想要管理 Microsoft Graph 時,您可以使用應用程式許可權做為應用程式,也可以使用委派的許可權。 針對委派的許可權,使用者或系統管理員同意應用程式要求的許可權。 當應用程式呼叫目標資源時,系統就會將代表已登入使用者採取行動的權限委派給該應用程式。 應用程式許可權是由不需要登入使用者的應用程式使用,因此需要應用程式許可權。 因此,只有系統管理員可以同意應用程式許可權。

注意

使用者透過使用者流程或自定義原則登入的委派許可權,無法用於 Microsoft Graph API 的委派許可權。

程式代碼範例:如何以程序設計方式管理用戶帳戶

此程式代碼範例是使用 Microsoft Graph SDK 與 Microsoft Graph API 互動的 .NET Core 控制台應用程式。 其程式代碼示範如何呼叫 API,以程式設計方式管理 Azure AD B2C 租使用者中的使用者。 您可以 下載範例封存 (*.zip)、 流覽 GitHub 上的存放庫 ,或複製存放庫:

git clone https://github.com/Azure-Samples/ms-identity-dotnetcore-b2c-account-management.git

取得程式代碼範例之後,請針對您的環境進行設定,然後建置專案:

  1. 在 Visual Studio 或 Visual Studio Code 中開啟專案。

  2. 開啟 [src/appsettings.json]。

  3. 在區appSettings段中,將 取代為您的租使用者名稱,並以Application (client) IDClient secret管理應用程式註冊的值取代 your-b2c-tenant 。 如需詳細資訊,請參閱 註冊 Microsoft Graph 應用程式

  4. 在存放庫的本機複本內開啟控制台視窗,切換至 src 目錄,然後建置專案:

    cd src
    dotnet build
    
  5. 使用 dotnet 命令執行應用程式:

    dotnet bin/Debug/netcoreapp3.1/b2c-ms-graph.dll
    

應用程式會顯示您可以執行的命令清單。 例如,取得所有使用者、取得單一使用者、刪除使用者、更新用戶的密碼,以及大容量導入。

注意

若要讓應用程式更新使用者帳戶密碼,您必須 將用戶系統管理員角色 授與應用程式。

程式代碼討論

此範例程式代碼會使用 Microsoft Graph SDK,其設計目的是簡化建置可存取 Microsoft Graph 的高品質、有效率且具彈性的應用程式。

對 Microsoft Graph API 的任何要求都需要存取令牌以進行驗證。 此解決方案會 使用 Microsoft.Graph.Auth NuGet 套件,以提供 Microsoft 驗證連結庫 (MSAL) 的驗證案例型包裝函式,以搭配 Microsoft Graph SDK 使用。

RunAsync Program.cs 檔案中的 方法:

  1. appsettings.json 檔案讀取應用程式設定
  2. 使用 OAuth 2.0 用戶端認證授與 流程,初始化驗證提供者。 透過客戶端認證授與流程,應用程式能夠取得存取令牌來呼叫 Microsoft Graph API。
  3. 使用驗證提供者設定 Microsoft Graph 服務用戶端:
// Read application settings from appsettings.json (tenant ID, app ID, client secret, etc.)
AppSettings config = AppSettingsFile.ReadFromJsonFile();

// Initialize the client credential auth provider
var scopes = new[] { "https://graph.microsoft.com/.default" };
var clientSecretCredential = new ClientSecretCredential(config.TenantId, config.AppId, config.ClientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);

初始化的 GraphServiceClient 接著會在 UserService.cs 中使用,以執行使用者管理作業。 例如,取得租使用者中的用戶帳戶清單:

public static async Task ListUsers(GraphServiceClient graphClient)
{
    Console.WriteLine("Getting list of users...");

    try
    {
        // Get all users
        var users = await graphClient.Users
            .Request()
            .Select(e => new
            {
                e.DisplayName,
                e.Id,
                e.Identities
            })
            .GetAsync();

        // Iterate over all the users in the directory
        var pageIterator = PageIterator<User>
            .CreatePageIterator(
                graphClient,
                users,
                // Callback executed for each user in the collection
                (user) =>
                {
                    Console.WriteLine(JsonSerializer.Serialize(user));
                    return true;
                },
                // Used to configure subsequent page requests
                (req) =>
                {
                    Console.WriteLine($"Reading next page of users...");
                    return req;
                }
            );

        await pageIterator.IterateAsync();
    }
    catch (Exception ex)
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine(ex.Message);
        Console.ResetColor();
    }
}

使用 Microsoft Graph SDK 進行 API 呼叫包含如何從 Microsoft Graph 讀取和寫入資訊、用來 $select 控制傳回的屬性、提供自定義查詢參數,以及使用 $filter$orderBy 查詢參數的相關信息。

下一步