存取 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:
[活動詳細資料] 面板包含下列相關資訊:
區段 | 欄位 | 描述 |
---|---|---|
活動 | Name | 發生的活動。 例如,將 id_token 簽發至應用程式,以結束實際的使用者登入。 |
啟動者 (執行者) | ObjectId | 使用者用來登入之 B2C 應用程式的物件識別碼。 此識別碼在 Azure 入口網站中看不到,但可透過 Microsoft Graph API 存取。 |
啟動者 (執行者) | Spn | 使用者用來登入之 B2C 應用程式的應用程式識別碼。 |
目標 | ObjectId | 登入之使用者的物件識別碼。 |
其他詳細資料 | TenantId | Azure AD B2C 租用戶的租用戶識別碼。 |
其他詳細資料 | PolicyId | 正在用來將使用者登入之使用者流程 (原則) 的原則識別碼。 |
其他詳細資料 | ApplicationId | 使用者用來登入之 B2C 應用程式的應用程式識別碼。 |
在 Azure 入口網站中檢視稽核記錄
Azure 入口網站可讓您存取 Azure AD B2C 租用戶中的稽核記錄事件。
- 登入 Azure 入口網站。
- 切換至包含 Azure AD B2C 租用戶的目錄,然後瀏覽至 Azure AD B2C。
- 在左側功能表的 [活動] 底下,選取 [稽核記錄]。
過去七天內所記錄的活動事件清單隨即顯示。
有幾個篩選選項可供使用,包括:
如果您選取清單中的資料列,就會顯示事件的活動詳細資料。
若要以逗點分隔值 (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 使用者帳戶。