Как получить сведения об аутентификации Azure при входе в систему через Microsoft Graph

Мне нужно получить все сведения о действиях входа пользователя через библиотеку Microsoft Graph. Я дал все разрешения(может дальше больше) Я могу получить всю информацию о входе в систему, но отсутствуют только данные аутентификации.

Пожалуйста, посмотрите на картинку, которую я указываю

Вот мой блок кода для получения всех журналов входа

var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "aaaaaa-bbbb-cccc-dddd-fffffff";

var clientId = "kkkkkkkk-zzzz-yyyy-xxxxx-ghhhhhhh";
var clientSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var tenantName = "example.com";

var options = new TokenCredentialOptions
{
    AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};

// https://learn.microsoft.com/dotnet/api/azure.identity.clientsecretcredential
var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret, options);
var totalList = new List<Microsoft.Graph.Models.SignIn>();
GraphServiceClient graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var signIns = await graphClient.AuditLogs.SignIns.GetAsync();

var aulogs= await graphClient.AuditLogs.GetAsync();

Как я могу также получить данные аутентификации? Класс SignIn не имеет такого свойства, как Property.

🤔 А знаете ли вы, что...
C# поддерживает множество парадигм программирования, включая процедурное, объектно-ориентированное и функциональное программирование.


100
2

Ответы:

Давайте посмотрим на свойства для API Graph входа в список версии 1.0. На самом деле свойства Authentication Details нет, поэтому мы не получаем его в ответе, что должно быть ожидаемым поведением.

В качестве обходного пути мы можем использовать бета-версию API, содержащую свойство Authentication Details. Но API-интерфейсы бета-версии Microsoft Graph могут быть изменены. Использование этих API в рабочих приложениях не поддерживается. Нам лучше продолжать использовать версию V1.0, если это возможно.

Использование бета-версии Graph SDK требует от нас использования пакета Microsoft.Graph.Beta вместо Microsoft.Graph. Требуется выбрать опцию «Включить предварительную версию».

Но для этого API требуется лицензия Microsoft Entra ID P1 или P2, поэтому я не могу проверить ваш…


Решено

Публикация подробностей подтверждения работы @Tiny Wang,

В версии Microsoft Graph API v1.0 свойство authenticationDetails недоступно в ответе, но оно доступно в бета-версии Microsoft Graph API. Однако API в бета-версии Microsoft Graph все еще разрабатываются и в большинстве случаев не рекомендуются. Для производства лучше всего использовать версию v1.0.

Для использования версии Microsoft Graph APIBeta необходимо иметь лицензии Microsoft Entra ID P1 или P2.

Первоначально я зарегистрировал приложение Microsoft Entra, предоставил и согласился с разрешениями API типа приложения AuditLog.Read.All и Directory.Read.All:

Используйте приведенный ниже код C#, чтобы получить SignIndetail для всех пользователей со свойством аутентификацииDetails:

using Microsoft.Identity.Client;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

public class Program
{
    private const string TenantId = "<tenant_id>";
    private const string ClientId = "<app_id>";
    private const string ClientSecret = "<client_secret>";
    private const string Scope = "https://graph.microsoft.com/.default";

    public static async Task Main(string[] args)
    {
        var accessToken = await GetAccessTokenAsync();
        Console.WriteLine($"Access Token: {accessToken}");

        var signInId = "YOUR_SIGNIN_ID";
        await GetSignInLogAsync(signInId, accessToken);
    }

    private static async Task<string> GetAccessTokenAsync()
    {
        IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(ClientId)
            .WithClientSecret(ClientSecret)
            .WithAuthority(new Uri($"https://login.microsoftonline.com/{TenantId}"))
            .Build();

        var result = await app.AcquireTokenForClient(new[] { Scope }).ExecuteAsync();
        return result.AccessToken;
    }

    private static async Task GetSignInLogAsync(string signInId, string accessToken)
    {
        using var httpClient = new HttpClient();
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

        var response = await httpClient.GetAsync($"https://graph.microsoft.com/beta/auditLogs/signIns");
        response.EnsureSuccessStatusCode();

        var content = await response.Content.ReadAsStringAsync();
        Console.WriteLine($"Sign-In Log: {content}");
    }
}

Выход:

Максимальный размер и размер по умолчанию — 1000 объектов, и по умолчанию сначала возвращаются самые последние входы.

Ссылка:

Вход в систему — бета-версия Microsoft Graph | Microsoft Learn