in src/CsrValidation/csharp/ScepValidation/IntuneServiceLocationProvider.cs [195:261]
private async Task RefreshServiceMapAsync()
{
string token = string.Empty;
string graphRequest = $"{this.msalGraphResourceUrl}v{this.msGraphApiVersion}/servicePrincipals/appId={this.intuneAppId}/endpoints";
bool msalFailed = false;
try
{
token = await this.msalClient.AcquireTokenAsync(new string[] { this.msalGraphResourceUrl + ".default" });
}
catch { msalFailed = true; }
if (msalFailed)
{
token = await this.adalClient.AcquireTokenAsync(this.aadGraphResourceUrl);
graphRequest = this.aadGraphResourceUrl + tenant + "/servicePrincipalsByAppId/" + this.intuneAppId + "/serviceEndpoints?api-version=" + this.aadGraphApiVersion;
}
Guid activityId = Guid.NewGuid();
IHttpClient client = this.httpClient;
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
client.DefaultRequestHeaders.Add("client-request-id", activityId.ToString());
HttpResponseMessage response = null;
string result = null;
try
{
response = await client.GetAsync(graphRequest);
result = await response.Content.ReadAsStringAsync();
response.EnsureSuccessStatusCode();
}
catch (HttpRequestException e)
{
trace.TraceEvent(TraceEventType.Error, 0, $"Failed to contact intune service with URL: {graphRequest};\r\n{e.Message}");
trace.TraceEvent(TraceEventType.Error, 0, result);
throw;
}
JObject jsonResponse;
try
{
jsonResponse = JObject.Parse(result);
}
catch (JsonReaderException e)
{
throw new IntuneClientException($"Failed to parse JSON response during Service Discovery from Graph. Response {result}", e);
}
JToken serviceEndpoints = null;
if (jsonResponse.TryGetValue("value", out serviceEndpoints))
{
serviceMap.Clear(); // clear map now that we ideally have a good response
foreach (var service in serviceEndpoints)
{
var serviceName = service["providerName"] == null ? service["serviceName"] : service["providerName"];
serviceMap[serviceName.ToString().ToLowerInvariant()] = service["uri"].ToString();
}
}
else
{
throw new IntuneClientException($"Failed to parse JSON response during Service Discovery from Graph. Response {jsonResponse.ToString()}");
}
}