Uzyskiwanie dostępu do dzienników inspekcji usługi Azure AD B2C

Usługa Azure Active Directory B2C (Azure AD B2C) emituje dzienniki inspekcji zawierające informacje o aktywności dotyczące zasobów B2C, wystawionych tokenów i dostępu administratora. Ten artykuł zawiera krótkie omówienie informacji dostępnych w dziennikach inspekcji i instrukcje dotyczące uzyskiwania dostępu do tych danych dla dzierżawy usługi Azure AD B2C.

Zdarzenia dziennika inspekcji są zachowywane tylko przez siedem dni. Zaplanuj pobieranie i przechowywanie dzienników przy użyciu jednej z metod przedstawionych poniżej, jeśli potrzebujesz dłuższego okresu przechowywania.

Uwaga

Logowania użytkowników dla poszczególnych aplikacji Azure AD B2C nie są widoczne w sekcji Użytkownicy identyfikatora Microsoft Entra lub Azure AD stron B2C w Azure Portal. Zdarzenia logowania pokazują aktywność użytkownika, ale nie można ich skorelować z aplikacją B2C zalogowaną przez użytkownika. W tym artykule należy użyć dzienników inspekcji, zgodnie z opisem w tym artykule.

Omówienie działań dostępnych w kategorii B2C dzienników inspekcji

Kategoria B2C w dziennikach inspekcji zawiera następujące typy działań:

Typ działania Opis
Autoryzacja Działania dotyczące autoryzacji użytkownika w celu uzyskania dostępu do zasobów B2C (na przykład administratora, który uzyskuje dostęp do listy zasad B2C).
Directory Działania związane z atrybutami katalogu pobierane, gdy administrator loguje się przy użyciu Azure Portal.
Aplikacja Tworzenie, odczytywanie, aktualizowanie i usuwanie operacji (CRUD) w aplikacjach B2C.
Klucz Operacje CRUD na kluczach przechowywanych w kontenerze kluczy B2C.
Zasób Operacje CRUD na zasobach B2C. Na przykład zasady i dostawcy tożsamości.
Authentication Walidacja poświadczeń użytkownika i wystawiania tokenów.

W przypadku działań CRUD obiektu użytkownika zapoznaj się z kategorią Katalog podstawowy .

Przykładowe działanie

Ten przykładowy obraz z Azure Portal przedstawia dane przechwycone, gdy użytkownik loguje się za pomocą zewnętrznego dostawcy tożsamości, w tym przypadku Facebook:

Przykład strony Szczegóły aktywności dziennika inspekcji w Azure Portal

Panel szczegółów działania zawiera następujące istotne informacje:

Sekcja Pole Opis
Działanie Nazwa Które działanie miało miejsce. Na przykład problem z id_token do aplikacji, który kończy rzeczywiste logowanie użytkownika.
Zainicjowane przez (aktor) ObjectId Identyfikator obiektu aplikacji B2C, do której loguje się użytkownik. Ten identyfikator nie jest widoczny w Azure Portal, ale jest dostępny za pośrednictwem interfejs Graph API firmy Microsoft.
Zainicjowane przez (aktor) Spn Identyfikator aplikacji B2C, do której loguje się użytkownik.
Elementy docelowe ObjectId Identyfikator obiektu zalogowanego użytkownika.
Dodatkowe szczegóły TenantId Identyfikator dzierżawy dzierżawy usługi Azure AD B2C.
Dodatkowe szczegóły PolicyId Identyfikator zasad przepływu użytkownika (zasad) używany do logowania użytkownika.
Dodatkowe szczegóły ApplicationId Identyfikator aplikacji B2C, do której loguje się użytkownik.

Wyświetlanie dzienników inspekcji w Azure Portal

Azure Portal zapewnia dostęp do zdarzeń dziennika inspekcji w dzierżawie usługi Azure AD B2C.

  1. Zaloguj się w witrynie Azure Portal.
  2. Przejdź do katalogu zawierającego dzierżawę usługi Azure AD B2C, a następnie przejdź do Azure AD B2C.
  3. W obszarze Działania w menu po lewej stronie wybierz pozycję Dzienniki inspekcji.

Zostanie wyświetlona lista zdarzeń aktywności zarejestrowanych w ciągu ostatnich siedmiu dni.

Przykładowy filtr z dwoma zdarzeniami działania w Azure Portal

Dostępnych jest kilka opcji filtrowania, w tym:

  • Typ zasobu działania — filtruj według typów działań przedstawionych w tabeli w sekcji Przegląd dostępnych działań .
  • Date — filtruj zakres dat wyświetlanych działań.

Jeśli wybierzesz wiersz na liście, zostaną wyświetlone szczegóły działania zdarzenia.

Aby pobrać listę zdarzeń działań w pliku wartości rozdzielanych przecinkami (CSV), wybierz pozycję Pobierz.

Uzyskiwanie dzienników inspekcji za pomocą interfejsu API raportowania Microsoft Entra

Dzienniki inspekcji są publikowane w tym samym potoku co inne działania dotyczące identyfikatora Microsoft Entra, aby można było uzyskać do nich dostęp za pośrednictwem interfejsu API raportowania Microsoft Entra. Aby uzyskać więcej informacji, zobacz Wprowadzenie do interfejsu API raportowania Microsoft Entra.

Włączanie dostępu do interfejsu API raportowania

Aby zezwolić na dostęp oparty na skryptach lub aplikacjach do interfejsu API raportowania Microsoft Entra, potrzebna jest aplikacja zarejestrowana w dzierżawie usługi Azure AD B2C z następującymi uprawnieniami interfejsu API. Te uprawnienia można włączyć w istniejącej rejestracji aplikacji w ramach dzierżawy B2C lub utworzyć nową, która jest przeznaczona do użycia z automatyzacją dzienników inspekcji.

  • Uprawnienia > aplikacji programu Microsoft Graph > AuditLog.Read.All >

Wykonaj kroki opisane w poniższym artykule, aby zarejestrować aplikację z wymaganymi uprawnieniami:

Zarządzanie usługą Azure AD B2C za pomocą programu Microsoft Graph

Po zarejestrowaniu aplikacji z odpowiednimi uprawnieniami zapoznaj się z sekcją skryptu programu PowerShell w dalszej części tego artykułu, aby zapoznać się z przykładem sposobu uzyskiwania zdarzeń działań za pomocą skryptu.

Dostęp do interfejsu API

Aby pobrać Azure AD zdarzenia dziennika inspekcji B2C za pośrednictwem interfejsu API, przefiltruj dzienniki w B2C kategorii. Aby filtrować według kategorii, użyj parametru filter ciągu zapytania podczas wywoływania punktu końcowego interfejsu API raportowania Microsoft Entra.

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

Skrypt programu PowerShell

Poniższy skrypt programu PowerShell przedstawia przykład wykonywania zapytań dotyczących interfejsu API raportowania Microsoft Entra. Po wykonaniu zapytania względem interfejsu API wyświetla zarejestrowane zdarzenia do standardowych danych wyjściowych, a następnie zapisuje dane wyjściowe JSON w pliku.

Ten skrypt można wypróbować w usłudze Azure Cloud Shell. Pamiętaj, aby zaktualizować ją przy użyciu identyfikatora aplikacji, klucza tajnego klienta i nazwy dzierżawy usługi 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"
}

Oto reprezentacja JSON przykładowego zdarzenia działania pokazanego wcześniej w artykule:

{
    "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"
        }
    ]
}

Następne kroki

Możesz zautomatyzować inne zadania administracyjne, na przykład zarządzać kontami użytkowników usługi Azure AD B2C przy użyciu programu Microsoft Graph.