Оценить политику условного доступа, используя C# ⇐ C#

Место общения программистов C#
Anonymous
Оценить политику условного доступа, используя C#

Сообщение Anonymous »

Я пытаюсь выполнить оценку условного доступа в C#, используя API Microsoft Graph и

Код: Выделить всё

Microsoft.Graph
Nuget Package.
Однако я не могу получить рабочий запрос. Все мои попытки приводят к коду статуса http: Badrequest < /code>
, чтобы подчеркнуть: я хочу провести оценку условного доступа, не пытаться создать или обновить политику. < /P>
Вот мой класс: < /p>

Код: Выделить всё

    public async Task RunConditionalAccessWhatIfAsync(string _userId, List _includedApplications)
{
try
{
Logger.Information($"Starting Conditional Access What-If check for user {_userId}", _userId);

using var httpClient = await AzureHttpAuthenticationService.GetAuthenticatedHttpClientAsync();

var requestBody = new
{
signInIdentity = new
{
userId = _userId
},
signInContext = new
{
includeApplications = _includedApplications
},
appliedPoliciesOnly = true
};

Logger.Information("request body: " + JsonConvert.SerializeObject(requestBody));

var requestUrl = "https://graph.microsoft.com/beta/identity/conditionalAccess/evaluate";
var requestContent = new StringContent(JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");

var response = await httpClient.PostAsync(requestUrl, requestContent);

Logger.Information($"HTTP Status Code: {response.StatusCode}");
Logger.Information($"Response Headers: {response.Headers}");

response.EnsureSuccessStatusCode();

var responseContent = await response.Content.ReadAsStringAsync();
Logger.Information(responseContent);

var policies = JsonConvert.DeserializeObject[*]>(responseContent);

var cumulativeSettings = new CumulativePolicySettings();

foreach (var policy in policies)
{
cumulativeSettings.AllAppliedControls.AddRange(policy.AppliedControls);
foreach (var setting in policy.Settings)
{
cumulativeSettings.CombinedSettings[setting.Key] = setting.Value;
}
}

Logger.Information("Conditional Access What-If check completed. Policies evaluated: {Count}", policies.Count);
return cumulativeSettings;
}
catch (Exception ex)
{
Logger.Error("Error occurred during Conditional Access What-If check: {Message}", ex.Message);
return null;
}
}
Метод называется таким, где идентификатор-это действительный идентификатор пользователя (идентификатор объекта, модифицированный для безопасности): var result = watait graphcclientwrapper.runconditionalaccesswhatifasync ("123c123d-1a88-44a5-93a6-1230d12365b2", rescorverids); prerseids); /> Результирующий корпус запроса выглядит так после конвертации в JSON: {"Signinidentity": {"userId": "123C123D-1A88-44A5-93A6-1230D12365B2"}, "SigninContext": {"IncladeAp Пликации ": [" 00000003-0000-0FF1-CE00-000000000000 "]}," AppliedPoliciesonly ": true}
Для аутентификации я использую регистрацию приложения < /code>.
разрешения предоставляются согласия администратора: < /p>

plicy.policy.read.all
[*] directory.all
Alli.Reactory.All.AllI. /> < /ul>

Код: Выделить всё

AzureHttpAuthenticationService
создает аутентифицированный HttpClient . Для справки: < /p>

Код: Выделить всё

private async Task GetAccessTokenAsync()
{
var app = ConfidentialClientApplicationBuilder.Create(ClientID)
.WithClientSecret(ClientSecret)
.WithAuthority(Authority)
.Build();

string[] Scopes = { "https://graph.microsoft.com/.default" };

var result = await app.AcquireTokenForClient(Scopes).ExecuteAsync();
return result.AccessToken;
}

public async Task GetAuthenticatedHttpClientAsync()
{
var httpClient = new HttpClient();
var token = await GetAccessTokenAsync();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
return httpClient;
}
Получите вызовы с помощью этого клиента по адресу https://graph.microsoft.com/v1.0/identi ... s/policies работать нормально. Поэтому я предполагаю, что здесь нет проблем. Кроме того, ответ 400 не указывает на проблемы с аутентификацией.

Код: Выделить всё

2025-06-04 23:15:42.955 +02:00 [INF] HTTP Status Code: BadRequest
2025-06-04 23:15:42.956 +02:00 [INF] Response Headers: Cache-Control: no-cache
Transfer-Encoding: chunked
Strict-Transport-Security: max-age=31536000
request-id: b30a0e35-0b3c-4274-ae93-977d95ff46dc
client-request-id: b30a0e35-0b3c-4274-ae93-977d95ff46dc
x-ms-ags-diagnostic: {"ServerInfo":{"DataCenter":"Germany West Central","Slice":"E","Ring":"4","ScaleUnit":"002","RoleInstance":"FR3PEPF00000351"}}
Link: LOT OF LINKS REMOVED FOR READABILITY
Deprecation: Thu, 17 Feb 2022 23:59:59 GMT
Sunset: Sat, 17 Feb 2024 23:59:59 GMT
Date: Wed, 04 Jun 2025 21:15:42 GMT
< /code>
То же самое касается текущей (не-бета-конечной точки. < /p>
Кто-нибудь знает, как заставить это работать? Я рад использовать пакет microsoft.graph 
nuget, но я не смог найти там метод.
иначе любая помощь в получении правильного корпуса запроса на график также был бы удивительным.
Спасибо за помощь!

Подробнее здесь: https://stackoverflow.com/questions/796 ... ng-c-sharp

Вернуться в «C#»