Skip to content

Commit 4bae424

Browse files
authored
Ensuring JWT token validation parameters support Linux Consumption on Legion (#10946)
1 parent 0ee99cb commit 4bae424

File tree

3 files changed

+21
-48
lines changed

3 files changed

+21
-48
lines changed

src/WebJobs.Script.WebHost/Program.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,10 @@ private static void InitializeProcess()
109109
{
110110
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledExceptionInLinuxConsumption;
111111
}
112-
else if (SystemEnvironment.Instance.IsFlexConsumptionSku())
112+
else if (SystemEnvironment.Instance.IsFlexConsumptionSku() ||
113+
SystemEnvironment.Instance.IsLinuxConsumptionOnLegion())
113114
{
114-
//todo: Replace with legion specific logger.
115+
// TODO: Replace with legion specific logger?
115116
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledExceptionInLinuxConsumption;
116117
}
117118
else if (SystemEnvironment.Instance.IsLinuxAppService())

src/WebJobs.Script.WebHost/Security/Authentication/Jwt/ScriptJwtBearerExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,8 @@ private static IEnumerable<string> GetValidAudiences()
105105
ScriptSettingsManager.Instance.GetSetting(WebsitePodName)
106106
};
107107
}
108-
else if (SystemEnvironment.Instance.IsLinuxConsumptionOnAtlas())
108+
else if (SystemEnvironment.Instance.IsLinuxConsumptionOnAtlas() ||
109+
SystemEnvironment.Instance.IsLinuxConsumptionOnLegion())
109110
{
110111
return new string[]
111112
{

test/WebJobs.Script.Tests/Extensions/ScriptJwtBearerExtensionsTests.cs

Lines changed: 16 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -14,71 +14,42 @@ namespace Microsoft.Azure.WebJobs.Script.Tests.Extensions
1414
public class ScriptJwtBearerExtensionsTests
1515
{
1616
[Theory]
17-
[InlineData(true, true)]
18-
[InlineData(true, false)]
19-
[InlineData(false, true)]
20-
[InlineData(false, false)]
21-
public void CreateTokenValidationParameters_HasExpectedAudiences(bool isPlaceholderModeEnabled, bool isLinuxConsumptionOnLegion)
17+
[InlineData(true, "FlexConsumption", null, "1", "RandomPodName", "", "RandomPodName")] // Placeholder mode Flex Consumption
18+
[InlineData(true, "Dynamic", null, "1", null, "RandomContainerName", "RandomContainerName")] // Placeholder mode Linux Consumption on Legion
19+
[InlineData(true, "Dynamic", null, null, null, "RandomContainerName", "RandomContainerName")] // Placeholder mode Linux Consumption on Atlas
20+
[InlineData(false, "FlexConsumption", null, "1", "RandomPodName", null, "https://RandomSiteName.azurewebsites.net/azurefunctions,https://RandomSiteName.azurewebsites.net")]
21+
[InlineData(false, "Dynamic", null, null, null, "RandomContainerName", "https://RandomSiteName.azurewebsites.net/azurefunctions,https://RandomSiteName.azurewebsites.net")]
22+
[InlineData(false, "Dynamic", "123", null, null, null, "https://RandomSiteName.azurewebsites.net/azurefunctions,https://RandomSiteName.azurewebsites.net")]
23+
public void CreateTokenValidationParameters_HasExpectedAudiences(bool isPlaceholderModeEnabled, string sku,
24+
string websiteInstanceId, string legionServiceHost, string podName, string containerName, string expectedAudiences)
2225
{
23-
var podName = "RandomPodName";
24-
var containerName = "RandomContainerName";
2526
var siteName = "RandomSiteName";
26-
27-
var expectedWithSiteName = new string[]
28-
{
29-
string.Format(ScriptConstants.SiteAzureFunctionsUriFormat, siteName),
30-
string.Format(ScriptConstants.SiteUriFormat, siteName)
31-
};
32-
var expectedWithPodName = new string[] { podName };
33-
var expectedWithContainerName = Array.Empty<string>();
34-
3527
var testData = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
3628
{
3729
[AzureWebsiteName] = siteName,
3830
[WebsitePodName] = podName,
39-
[ContainerName] = string.Empty
31+
[ContainerName] = containerName,
32+
[AzureWebsiteSku] = sku,
33+
[LegionServiceHost] = legionServiceHost,
34+
[AzureWebsiteInstanceId] = websiteInstanceId
4035
};
4136

4237
if (isPlaceholderModeEnabled)
4338
{
4439
testData[AzureWebsitePlaceholderMode] = "1";
4540
}
4641

47-
if (isLinuxConsumptionOnLegion)
48-
{
49-
testData[AzureWebsiteInstanceId] = string.Empty;
50-
testData[WebsitePodName] = podName;
51-
testData[LegionServiceHost] = "1";
52-
}
53-
else
54-
{
55-
expectedWithContainerName = new string[] { containerName };
56-
testData[AzureWebsiteInstanceId] = string.Empty;
57-
testData[ContainerName] = containerName;
58-
}
59-
6042
testData[ContainerEncryptionKey] = Convert.ToBase64String(TestHelpers.GenerateKeyBytes());
6143
using (new TestScopedSettings(ScriptSettingsManager.Instance, testData))
6244
{
6345
var tokenValidationParameters = ScriptJwtBearerExtensions.CreateTokenValidationParameters();
6446
var audiences = tokenValidationParameters.ValidAudiences.ToList();
6547

66-
if (isPlaceholderModeEnabled &&
67-
isLinuxConsumptionOnLegion)
68-
{
69-
Assert.Equal(audiences.Count, expectedWithPodName.Length);
70-
Assert.Equal(audiences[0], expectedWithPodName[0]);
71-
}
72-
else if (isPlaceholderModeEnabled)
73-
{
74-
Assert.Equal(audiences.Count, expectedWithContainerName.Length);
75-
Assert.Equal(audiences[0], expectedWithContainerName[0]);
76-
}
77-
else
48+
string[] parsedAudiences = expectedAudiences.Split(',');
49+
Assert.Equal(audiences.Count, parsedAudiences.Length);
50+
for (int i = 0; i < audiences.Count; i++)
7851
{
79-
Assert.Equal(audiences.Count, expectedWithSiteName.Length);
80-
Assert.True(audiences.Contains(expectedWithSiteName[0]));
81-
Assert.True(audiences.Contains(expectedWithSiteName[1]));
52+
Assert.Equal(audiences[i], parsedAudiences[i]);
8253
}
8354
}
8455
}

0 commit comments

Comments
 (0)