Мне нужно получить все сведения о действиях входа пользователя через библиотеку 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# поддерживает множество парадигм программирования, включая процедурное, объектно-ориентированное и функциональное программирование.
Давайте посмотрим на свойства для 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