Skip to content

Commit 9219bbf

Browse files
authored
Add env variable support for aad auth (#1735)
* suport env variables for aad auth * update env to use ClientId * fix smoke test failure
1 parent 4b730d0 commit 9219bbf

File tree

4 files changed

+70
-3
lines changed

4 files changed

+70
-3
lines changed

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/wasbootstrap/configuration/ConfigurationBuilder.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,15 @@
2828
import java.nio.file.Path;
2929
import java.util.List;
3030
import java.util.Locale;
31+
import java.util.Map;
3132
import java.util.concurrent.CopyOnWriteArrayList;
3233

34+
import com.google.common.base.Splitter;
3335
import com.microsoft.applicationinsights.agent.bootstrap.diagnostics.DiagnosticsHelper;
3436
import com.microsoft.applicationinsights.agent.internal.wasbootstrap.configuration.Configuration.JmxMetric;
3537
import com.microsoft.applicationinsights.agent.internal.wasbootstrap.configuration.Configuration.SamplingOverride;
3638
import com.microsoft.applicationinsights.customExceptions.FriendlyException;
39+
import com.microsoft.applicationinsights.internal.authentication.AuthenticationType;
3740
import com.squareup.moshi.JsonAdapter;
3841
import com.squareup.moshi.JsonDataException;
3942
import com.squareup.moshi.JsonEncodingException;
@@ -81,6 +84,8 @@ public class ConfigurationBuilder {
8184

8285
private static final String APPLICATIONINSIGHTS_PREVIEW_METRIC_INTERVAL_SECONDS = "APPLICATIONINSIGHTS_PREVIEW_METRIC_INTERVAL_SECONDS";
8386

87+
private static final String APPLICATIONINSIGHTS_AUTHENTICATION_STRING = "APPLICATIONINSIGHTS_AUTHENTICATION_STRING";
88+
8489
// cannot use logger before loading configuration, so need to store warning messages locally until logger is initialized
8590
private static final List<ConfigurationWarnMessage> configurationWarnMessages = new CopyOnWriteArrayList<>();
8691

@@ -113,6 +118,31 @@ private static void overlayProfilerConfiguration(Configuration config) {
113118
.parseBoolean(overlayWithEnvVar(APPLICATIONINSIGHTS_PROFILER_ENABLED, Boolean.toString(config.preview.profiler.enabled)));
114119
}
115120

121+
private static void overlayAadConfiguration(Configuration config) {
122+
String aadAuthString = getEnvVar(APPLICATIONINSIGHTS_AUTHENTICATION_STRING);
123+
if(aadAuthString != null) {
124+
Map<String, String> keyValueMap = Splitter.on(";")
125+
.trimResults()
126+
.omitEmptyStrings()
127+
.withKeyValueSeparator("=")
128+
.split(aadAuthString);
129+
String authorization = keyValueMap.get("Authorization");
130+
if(authorization != null && authorization.equals("AAD")) {
131+
// Override any configuration from json
132+
config.preview.authentication = new Configuration.AadAuthentication();
133+
config.preview.authentication.enabled = true;
134+
config.preview.authentication.type = AuthenticationType.SAMI;
135+
String clientId = keyValueMap.get("ClientId");
136+
if(clientId != null && !clientId.isEmpty()) {
137+
// Override type to User Assigned Managed Identity
138+
config.preview.authentication.type = AuthenticationType.UAMI;
139+
config.preview.authentication.clientId = clientId;
140+
}
141+
}
142+
}
143+
144+
}
145+
116146
private static void loadLogCaptureEnvVar(Configuration config) {
117147
String loggingEnvVar = getEnvVar(APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_LEVEL);
118148
if (loggingEnvVar != null) {
@@ -270,7 +300,7 @@ static void overlayEnvVars(Configuration config) throws IOException {
270300

271301
addDefaultJmxMetricsIfNotPresent(config);
272302
overlayProfilerConfiguration(config);
273-
303+
overlayAadConfiguration(config);
274304
loadInstrumentationEnabledEnvVars(config);
275305
}
276306

agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/wasbootstrap/configuration/ConfigurationTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,29 @@ public void shouldOverrideInstrumentationSpringSchedulingEnabled() throws IOExce
521521
assertFalse(configuration.instrumentation.springScheduling.enabled);
522522
}
523523

524+
@Test
525+
public void shouldOverrideAadAuthenticationConfig() throws IOException {
526+
envVars.set("APPLICATIONINSIGHTS_AUTHENTICATION_STRING", "Authorization=AAD;ClientId=12345678");
527+
528+
Configuration configuration = loadConfiguration("applicationinsights_aadauthenv.json");
529+
ConfigurationBuilder.overlayEnvVars(configuration);
530+
531+
assertTrue(configuration.preview.authentication.enabled);
532+
assertEquals(AuthenticationType.UAMI, configuration.preview.authentication.type);
533+
assertEquals("12345678", configuration.preview.authentication.clientId);
534+
assertNull(configuration.preview.authentication.clientSecret);
535+
536+
envVars.set("APPLICATIONINSIGHTS_AUTHENTICATION_STRING", "Authorization=AAD;ClientId=");
537+
538+
Configuration configuration2 = loadConfiguration("applicationinsights_aadauthenv.json");
539+
ConfigurationBuilder.overlayEnvVars(configuration2);
540+
541+
assertTrue(configuration2.preview.authentication.enabled);
542+
assertEquals(AuthenticationType.SAMI, configuration2.preview.authentication.type);
543+
assertNull(configuration2.preview.authentication.clientId);
544+
assertNull(configuration2.preview.authentication.clientSecret);
545+
}
546+
524547
@Test
525548
public void shouldUseRpConfigRole() {
526549
Configuration configuration = new Configuration();
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"connectionString": "InstrumentationKey=00000000-0000-0000-0000-000000000000",
3+
"preview" : {
4+
"authentication" : {
5+
"enabled": false,
6+
"type": "CLIENTSECRET",
7+
"clientId" : "123xyz",
8+
"keePassDatabasePath" : "path/to/keePass",
9+
"tenantId": "tenant123",
10+
"clientSecret": "clientsecret123",
11+
"authorityHost": "https://test.com/microsoft/"
12+
}
13+
}
14+
}

test/smoke/testApps/CoreAndFilter/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/CoreAndFilterTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ public void testTrackPageView() throws Exception {
291291

292292
assertNotNull(pv2);
293293
assertEquals(new Duration(123456), pv2.getDuration());
294-
assertEquals("2010-10-10T00:00:00.000+0000", pvdEnvelope2.getTime());
294+
assertEquals("2010-10-10T00:00:00Z", pvdEnvelope2.getTime());
295295
assertEquals("value", pv2.getProperties().get("key"));
296296
assertEquals("a-value", pv2.getProperties().get("a-prop"));
297297
assertEquals("another-value", pv2.getProperties().get("another-prop"));
@@ -312,7 +312,7 @@ public void testTrackPageView() throws Exception {
312312

313313
assertNotNull(pv3);
314314
assertEquals(new Duration(123456), pv3.getDuration());
315-
assertEquals("2010-10-10T00:00:00.000+0000", pvdEnvelope3.getTime());
315+
assertEquals("2010-10-10T00:00:00Z", pvdEnvelope3.getTime());
316316
assertEquals("value", pv3.getProperties().get("key"));
317317
assertEquals("a-value", pv3.getProperties().get("a-prop"));
318318
assertEquals("another-value", pv3.getProperties().get("another-prop"));

0 commit comments

Comments
 (0)