重要
自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息。
注释
此功能目前为公共预览版。
Azure Active Directory B2C (Azure AD B2C) 发出审核日志,其中包含有关 B2C 资源、颁发的令牌和管理员访问权限的活动信息。 本文简要概述了审核日志中提供的信息以及如何访问 Azure AD B2C 租户的此数据的说明。
审核日志事件仅保留 七天。 如果需要更长的保留期,请计划使用以下方法之一下载和存储日志。
注释
在 Azure 门户中的“Microsoft Entra ID 或 Azure AD B2C 页面的”用户“部分下,看不到单个 Azure AD B2C 应用程序的用户登录。 该处的登录事件显示用户活动,但无法关联回用户登录的 B2C 应用程序。 必须对此使用审核日志,如本文中进一步所述。
B2C 类别审核日志中可用活动的概述
审核日志中的 B2C 类别包含以下类型的活动:
活动类型 | DESCRIPTION |
---|---|
授权 | 有关授权用户访问 B2C 资源的活动(例如,访问 B2C 策略列表的管理员)。 |
目录 | 与管理员使用 Azure 门户登录时检索到的目录属性相关的活动。 |
应用程序 | 在 B2C 应用程序中执行 CRUD(创建、读取、更新和删除)操作。 |
密钥 | 对存储在 B2C 密钥容器中的密钥执行 CRUD 操作。 |
资源 | 与 B2C 资源相关的 CRUD 操作。 例如,策略和标识提供者。 |
身份验证 | 验证用户凭据和令牌颁发。 |
有关用户对象 CRUD 活动,请参阅 核心目录 类别。
示例活动
Azure 门户中的此示例图像显示用户在使用外部标识提供者登录时捕获的数据,在本例中为 Facebook:
活动详细信息面板包含以下相关信息:
部分 | 领域 | DESCRIPTION |
---|---|---|
活动 | 名称 | 发生了哪项活动。 例如, 向应用程序发出id_token,以结束实际用户登录。 |
发起者(行动者) | 对象标识符 (ObjectId) | 用户正在登录的 B2C 应用程序的 对象 ID。 此标识符在 Azure 门户中不可见,但可通过 Microsoft 图形 API 进行访问。 |
发起者(行动者) | SPN | 用户正在登录的 B2C 应用程序的 应用程序 ID。 |
目标 | 对象标识符 (ObjectId) | 登录用户的对象 ID。 |
其他详细信息 | 租户ID | Azure AD B2C 租户的 租户 ID 。 |
其他详细信息 | `PolicyId` | 用于登录用户的用户流(策略)的策略 ID。 |
其他详细信息 | ApplicationId | 用户正在登录的 B2C 应用程序的 应用程序 ID。 |
在 Azure 门户中查看审核日志
Azure 门户提供对 Azure AD B2C 租户中的审核日志事件的访问权限。
- 登录到 Azure 门户。
- 切换到包含 Azure AD B2C 租户的目录,然后浏览到 Azure AD B2C。
- 在左侧菜单中的“ 活动 ”下,选择“ 审核日志”。
将显示过去七天内记录的活动事件列表。
提供了多个筛选选项,包括:
- 活动资源类型 - 按可用 活动概述 部分中表中显示的活动类型进行筛选。
- 日期 - 筛选显示的活动的日期范围。
如果在列表中选择一行,将显示该事件的活动详细信息。
若要下载逗号分隔值 (CSV) 文件中的活动事件列表,请选择“ 下载”。
使用 Microsoft Entra 报告 API 获取审核日志
审核日志与 Microsoft Entra ID 的其他活动一样发布到同一管道,因此可以通过 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://microsoftgraph.chinacloudapi.cn/v1.0/auditLogs/directoryAudits?$filter=loggedByService eq 'B2C' and activityDateTime gt 2019-09-10T02:28:17Z
PowerShell 脚本
以下 PowerShell 脚本演示了如何查询 Microsoft Entra 报告 API 的示例。 查询 API 后,它会将记录的事件打印到标准输出,然后将 JSON 输出写入文件。
# This script requires an application registration that's granted Microsoft Graph API permission
# /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.partner.onmschina.cn" # Insert your Azure AD B2C tenant domain name
$loginURL = "https://login.partner.microsoftonline.cn"
$resource = "https://microsoftgraph.chinacloudapi.cn" # 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://microsoftgraph.chinacloudapi.cn/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": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0",
"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": "00001111-aaaa-2222-bbbb-3333cccc4444",
"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.partner.onmschina.cn"
},
{
"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 用户帐户。