存取 Azure AD B2C 稽核記錄

Azure Active Directory B2C (Azure AD B2C) 會發出稽核記錄,其中包含關於 B2C 資源、發行的權杖和系統管理員存取的活動資訊。 本文概述在稽核記錄可取得的資訊,以及說明如何從您的 Azure AD B2C 租用戶存取此資料。

稽核記錄只會保留七天。 如果您需要更長的保留期,請使用以下所示的其中一個方法來規劃下載與儲存您的記錄。

注意

您無法在Azure 入口網站中Microsoft Entra識別碼Azure AD B2C頁面的 [使用者] 區段下看到個別 Azure AD B2C 應用程式的使用者登入。 登入事件會顯示使用者活動,但無法重新與使用者登入的 B2C 應用程式相互關聯。 如本文中的進一步說明,您必須為此使用稽核記錄。

稽核記錄 B2C 類別中可取得活動的概觀

稽核記錄中的 B2C 類別包含以下類型的活動:

活動類型 描述
授權 有關授權使用者存取 B2C 資源的活動 (例如,管理員存取 B2C 原則清單)。
目錄 當管理員使用 Azure 入口網站登入時,與所擷取目錄屬性相關的活動。
應用程式 B2C 應用程式上的建立、讀取、更新和刪除 (CRUD) 作業。
答案 B2C 金鑰容器所儲存金鑰上的 CRUD 作業。
資源 B2C 資源上的 CRUD 作業。 例如,原則和識別提供者。
驗證 使用者認證和權杖發行的驗證。

如需使用者物件 CRUD 活動,請參閱核心目錄類別。

範例活動

Azure 入口網站的這個範例影像,會顯示當使用者使用外部識別提供者登入時所捕捉到的資料,在此案例中為 Facebook:

Azure 入口網站中的稽核記錄活動詳細資料頁面範例

[活動詳細資料] 面板包含下列相關資訊:

區段 欄位 描述
活動 Name 發生的活動。 例如,將 id_token 簽發至應用程式,以結束實際的使用者登入。
啟動者 (執行者) ObjectId 使用者用來登入之 B2C 應用程式的物件識別碼。 此識別碼在 Azure 入口網站中看不到,但可透過 Microsoft Graph API 存取。
啟動者 (執行者) Spn 使用者用來登入之 B2C 應用程式的應用程式識別碼
目標 ObjectId 登入之使用者的物件識別碼
其他詳細資料 TenantId Azure AD B2C 租用戶的租用戶識別碼
其他詳細資料 PolicyId 正在用來將使用者登入之使用者流程 (原則) 的原則識別碼
其他詳細資料 ApplicationId 使用者用來登入之 B2C 應用程式的應用程式識別碼

在 Azure 入口網站中檢視稽核記錄

Azure 入口網站可讓您存取 Azure AD B2C 租用戶中的稽核記錄事件。

  1. 登入 Azure 入口網站
  2. 切換至包含 Azure AD B2C 租用戶的目錄,然後瀏覽至 Azure AD B2C
  3. 在左側功能表的 [活動] 底下,選取 [稽核記錄]。

過去七天內所記錄的活動事件清單隨即顯示。

Azure 入口網站中具有兩個活動事件的篩選條件範例

有幾個篩選選項可供使用,包括:

  • 活動資源類型 -依據 [可用的活動概觀] 區段中的表格中顯示的活動類型進行篩選。
  • 日期 -篩選顯示之活動的日期範圍。

如果您選取清單中的資料列,就會顯示事件的活動詳細資料。

若要以逗點分隔值 (CSV) 檔下載活動事件清單,請選取 [下載]。

使用Microsoft Entra報告 API 取得稽核記錄

稽核記錄會發佈至與Microsoft Entra識別碼的其他活動相同的管線,因此可以透過Microsoft Entra報告 API來存取。 如需詳細資訊,請參閱開始使用 Microsoft Entra 報告 API

啟用報告 API 存取

若要允許腳本或應用程式型存取Microsoft Entra報告 API,您需要在 Azure AD B2C 租使用者中註冊的應用程式具有下列 API 許可權。 您可以在 B2C 租用戶內的現有應用程式註冊上啟用這些權限,或建立專門用來搭配稽核記錄自動化的新權限。

  • Microsoft Graph > 應用程式權限 > AuditLog > AuditLog.Read.All

遵循下列文章中的步驟,以所需的權限註冊應用程式:

使用 Microsoft Graph 管理 Azure AD B2C

使用適當的權限註冊應用程式之後,請參閱本文稍後的 PowerShell 指令碼一節,以取得如何使用指令碼來取得活動事件的範例。

存取 API

若要透過 API 下載 Azure AD B2C 稽核記錄事件,請在 B2C 類別上篩選記錄。 若要依類別篩選,請在呼叫Microsoft Entra報告 API 端點時使用 filter 查詢字串參數。

https://graph.microsoft.com/v1.0/auditLogs/directoryAudits?$filter=loggedByService eq 'B2C' and activityDateTime gt 2019-09-10T02:28:17Z

PowerShell 指令碼

下列 PowerShell 腳本示範如何查詢Microsoft Entra報告 API 的範例。 查詢 API 之後,其會將記錄的事件列印至標準輸出,然後將 JSON 輸出寫入至檔案。

您可以在 Azure Cloud Shell 中嘗試此指令碼。 請務必使用應用程式識別碼、用戶端密碼和 Azure AD B2C 租用戶的名稱來進行更新。

# This script requires an application registration that's granted Microsoft Graph API permission
# https://learn.microsoft.com/azure/active-directory-b2c/microsoft-graph-get-started

# Constants
$ClientID       = "your-client-application-id-here"       # Insert your application's client ID, a GUID
$ClientSecret   = "your-client-application-secret-here"   # Insert your application's client secret value
$tenantdomain   = "your-b2c-tenant.onmicrosoft.com"       # Insert your Azure AD B2C tenant domain name

$loginURL       = "https://login.microsoftonline.com"
$resource       = "https://graph.microsoft.com"           # Microsoft Graph API resource URI
$7daysago       = "{0:s}" -f (get-date).AddDays(-7) + "Z" # Use 'AddMinutes(-5)' to decrement minutes, for example
Write-Output "Searching for events starting $7daysago"

# Create HTTP header, get an OAuth2 access token based on client id, secret and tenant domain
$body       = @{grant_type="client_credentials";resource=$resource;client_id=$ClientID;client_secret=$ClientSecret}
$oauth      = Invoke-RestMethod -Method Post -Uri $loginURL/$tenantdomain/oauth2/token?api-version=1.0 -Body $body

# Parse audit report items, save output to file(s): auditX.json, where X = 0 through n for number of nextLink pages
if ($oauth.access_token -ne $null) {
    $i=0
    $headerParams = @{'Authorization'="$($oauth.token_type) $($oauth.access_token)"}
    $url = "https://graph.microsoft.com/v1.0/auditLogs/directoryAudits?`$filter=loggedByService eq 'B2C' and activityDateTime gt  " + $7daysago

    # loop through each query page (1 through n)
    Do {
        # display each event on the console window
        Write-Output "Fetching data using Uri: $url"
        $myReport = (Invoke-WebRequest -UseBasicParsing -Headers $headerParams -Uri $url)
        foreach ($event in ($myReport.Content | ConvertFrom-Json).value) {
            Write-Output ($event | ConvertTo-Json)
        }

        # save the query page to an output file
        Write-Output "Save the output to a file audit$i.json"
        $myReport.Content | Out-File -FilePath audit$i.json -Force
        $url = ($myReport.Content | ConvertFrom-Json).'@odata.nextLink'
        $i = $i+1
    } while($url -ne $null)
} else {
    Write-Host "ERROR: No Access Token"
}

以下是本文稍早所示之範例活動事件的 JSON 表示法:

{
    "id": "B2C_DQO3J_4984536",
    "category": "Authentication",
    "correlationId": "00000000-0000-0000-0000-000000000000",
    "result": "success",
    "resultReason": "N/A",
    "activityDisplayName": "Issue an id_token to the application",
    "activityDateTime": "2019-09-14T18:13:17.0618117Z",
    "loggedByService": "B2C",
    "operationType": "",
    "initiatedBy": {
        "user": null,
        "app": {
            "appId": "00000000-0000-0000-0000-000000000000",
            "displayName": null,
            "servicePrincipalId": null,
            "servicePrincipalName": "00000000-0000-0000-0000-000000000000"
        }
    },
    "targetResources": [
        {
            "id": "00000000-0000-0000-0000-000000000000",
            "displayName": null,
            "type": "User",
            "userPrincipalName": null,
            "groupType": null,
            "modifiedProperties": []
        }
    ],
    "additionalDetails": [
        {
            "key": "TenantId",
            "value": "test.onmicrosoft.com"
        },
        {
            "key": "PolicyId",
            "value": "B2C_1A_signup_signin"
        },
        {
            "key": "ApplicationId",
            "value": "00000000-0000-0000-0000-000000000000"
        },
        {
            "key": "Client",
            "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
        },
        {
            "key": "IdentityProviderName",
            "value": "facebook"
        },
        {
            "key": "IdentityProviderApplicationId",
            "value": "0000000000000000"
        },
        {
            "key": "ClientIpAddress",
            "value": "127.0.0.1"
        }
    ]
}

後續步驟

您可以將其他管理工作自動化,例如,使用 Microsoft Graph 管理 Azure AD B2C 使用者帳戶