Skip to content

Commit ab1ab76

Browse files
committed
Revert support for no storage account scenario.
1 parent 64614b7 commit ab1ab76

File tree

9 files changed

+42
-303
lines changed

9 files changed

+42
-303
lines changed

src/WebJobs.Script.WebHost/Security/Authentication/Keys/AuthenticationLevelHandler.cs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the MIT License. See License.txt in the project root for license information.
33

4+
using System;
45
using System.Collections.Generic;
56
using System.Linq;
67
using System.Security.Claims;
@@ -83,25 +84,22 @@ protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
8384

8485
internal static Task<(string, AuthorizationLevel)> GetAuthorizationKeyInfoAsync(HttpRequest request, ISecretManagerProvider secretManagerProvider)
8586
{
86-
if (secretManagerProvider.SecretsEnabled)
87+
// first see if a key value is specified via headers or query string (header takes precedence)
88+
string keyValue = null;
89+
if (request.Headers.TryGetValue(FunctionsKeyHeaderName, out StringValues values))
8790
{
88-
// first see if a key value is specified via headers or query string (header takes precedence)
89-
string keyValue = null;
90-
if (request.Headers.TryGetValue(FunctionsKeyHeaderName, out StringValues values))
91-
{
92-
keyValue = values.First();
93-
}
94-
else if (request.Query.TryGetValue(FunctionsKeyQueryParamName, out values))
95-
{
96-
keyValue = values.First();
97-
}
91+
keyValue = values.First();
92+
}
93+
else if (request.Query.TryGetValue(FunctionsKeyQueryParamName, out values))
94+
{
95+
keyValue = values.First();
96+
}
9897

99-
if (!string.IsNullOrEmpty(keyValue))
100-
{
101-
ISecretManager secretManager = secretManagerProvider.Current;
102-
var functionName = request.HttpContext.Features.Get<IFunctionExecutionFeature>()?.Descriptor.Name;
103-
return secretManager.GetAuthorizationLevelOrNullAsync(keyValue, functionName);
104-
}
98+
if (!string.IsNullOrEmpty(keyValue))
99+
{
100+
ISecretManager secretManager = secretManagerProvider.Current;
101+
var functionName = request.HttpContext.Features.Get<IFunctionExecutionFeature>()?.Descriptor.Name;
102+
return secretManager.GetAuthorizationLevelOrNullAsync(keyValue, functionName);
105103
}
106104

107105
return Task.FromResult<(string, AuthorizationLevel)>((null, AuthorizationLevel.Anonymous));

test/WebJobs.Script.Tests.Integration/TestFunctionHost.cs

Lines changed: 10 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using System;
55
using System.Collections.Generic;
66
using System.Diagnostics;
7-
using System.IdentityModel.Tokens.Jwt;
87
using System.IO;
98
using System.Linq;
109
using System.Net.Http;
@@ -15,12 +14,11 @@
1514
using Microsoft.AspNetCore.Builder;
1615
using Microsoft.AspNetCore.Hosting;
1716
using Microsoft.AspNetCore.TestHost;
18-
using Microsoft.Azure.Web.DataProtection;
1917
using Microsoft.Azure.WebJobs.Host.Executors;
2018
using Microsoft.Azure.WebJobs.Script.ExtensionBundle;
19+
using Microsoft.Azure.WebJobs.Script.Grpc;
2120
using Microsoft.Azure.WebJobs.Script.Models;
2221
using Microsoft.Azure.WebJobs.Script.WebHost;
23-
using Microsoft.Azure.WebJobs.Script.WebHost.Authentication;
2422
using Microsoft.Azure.WebJobs.Script.WebHost.DependencyInjection;
2523
using Microsoft.Azure.WebJobs.Script.WebHost.Middleware;
2624
using Microsoft.Azure.WebJobs.Script.WebHost.Models;
@@ -34,7 +32,6 @@
3432
using Microsoft.Extensions.Logging;
3533
using Microsoft.Extensions.Logging.Abstractions;
3634
using Microsoft.Extensions.Options;
37-
using Microsoft.IdentityModel.Tokens;
3835
using Microsoft.WebJobs.Script.Tests;
3936
using Newtonsoft.Json.Linq;
4037
using IApplicationLifetime = Microsoft.AspNetCore.Hosting.IApplicationLifetime;
@@ -62,10 +59,9 @@ public TestFunctionHost(string scriptPath,
6259
Action<IWebJobsBuilder> configureScriptHostWebJobsBuilder = null,
6360
Action<IConfigurationBuilder> configureScriptHostAppConfiguration = null,
6461
Action<ILoggingBuilder> configureScriptHostLogging = null,
65-
Action<IServiceCollection> configureScriptHostServices = null,
66-
Action<IConfigurationBuilder> configureWebHostAppConfiguration = null)
62+
Action<IServiceCollection> configureScriptHostServices = null)
6763
: this(scriptPath, Path.Combine(Path.GetTempPath(), @"Functions"), configureWebHostServices, configureScriptHostWebJobsBuilder,
68-
configureScriptHostAppConfiguration, configureScriptHostLogging, configureScriptHostServices, configureWebHostAppConfiguration)
64+
configureScriptHostAppConfiguration, configureScriptHostLogging, configureScriptHostServices)
6965
{
7066
}
7167

@@ -74,9 +70,7 @@ public TestFunctionHost(string scriptPath, string logPath,
7470
Action<IWebJobsBuilder> configureScriptHostWebJobsBuilder = null,
7571
Action<IConfigurationBuilder> configureScriptHostAppConfiguration = null,
7672
Action<ILoggingBuilder> configureScriptHostLogging = null,
77-
Action<IServiceCollection> configureScriptHostServices = null,
78-
Action<IConfigurationBuilder> configureWebHostAppConfiguration = null,
79-
bool addTestSettings = true)
73+
Action<IServiceCollection> configureScriptHostServices = null)
8074
{
8175
_appRoot = scriptPath;
8276

@@ -132,10 +126,7 @@ public TestFunctionHost(string scriptPath, string logPath,
132126
})
133127
.ConfigureScriptHostAppConfiguration(scriptHostConfigurationBuilder =>
134128
{
135-
if (addTestSettings)
136-
{
137-
scriptHostConfigurationBuilder.AddTestSettings();
138-
}
129+
scriptHostConfigurationBuilder.AddTestSettings();
139130
configureScriptHostAppConfiguration?.Invoke(scriptHostConfigurationBuilder);
140131
})
141132
.ConfigureScriptHostLogging(scriptHostLoggingBuilder =>
@@ -158,11 +149,7 @@ public TestFunctionHost(string scriptPath, string logPath,
158149
}
159150

160151
config.Add(new ScriptEnvironmentVariablesConfigurationSource());
161-
if (addTestSettings)
162-
{
163-
config.AddTestSettings();
164-
}
165-
configureWebHostAppConfiguration?.Invoke(config);
152+
config.AddTestSettings();
166153
})
167154
.UseStartup<TestStartup>();
168155

@@ -198,9 +185,7 @@ public TestFunctionHost(string scriptPath, string logPath,
198185

199186
public ScriptJobHostOptions ScriptOptions => JobHostServices.GetService<IOptions<ScriptJobHostOptions>>().Value;
200187

201-
public ISecretManagerProvider SecretManagerProvider => _testServer.Host.Services.GetService<ISecretManagerProvider>();
202-
203-
public ISecretManager SecretManager => SecretManagerProvider.Current;
188+
public ISecretManager SecretManager => _testServer.Host.Services.GetService<ISecretManagerProvider>().Current;
204189

205190
public string LogPath => _hostOptions.LogPath;
206191

@@ -210,11 +195,6 @@ public TestFunctionHost(string scriptPath, string logPath,
210195

211196
public async Task<string> GetMasterKeyAsync()
212197
{
213-
if (!SecretManagerProvider.SecretsEnabled)
214-
{
215-
return null;
216-
}
217-
218198
HostSecretsInfo secrets = await SecretManager.GetHostSecretsAsync();
219199
return secrets.MasterKey;
220200
}
@@ -368,44 +348,13 @@ public async Task<FunctionStatus> GetFunctionStatusAsync(string functionName)
368348

369349
public async Task<HostStatus> GetHostStatusAsync()
370350
{
371-
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "admin/host/status");
372-
373-
if (SecretManagerProvider.SecretsEnabled)
374-
{
375-
// use admin key
376-
HostSecretsInfo secrets = await SecretManager.GetHostSecretsAsync();
377-
request.Headers.Add(AuthenticationLevelHandler.FunctionsKeyHeaderName, secrets.MasterKey);
378-
}
379-
else
380-
{
381-
// use admin jwt token
382-
string token = GenerateAdminJwtToken();
383-
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
384-
}
385-
386-
HttpResponseMessage response = await HttpClient.SendAsync(request);
351+
HostSecretsInfo secrets = await SecretManager.GetHostSecretsAsync();
352+
string uri = $"admin/host/status?code={secrets.MasterKey}";
353+
HttpResponseMessage response = await HttpClient.GetAsync(uri);
387354
response.EnsureSuccessStatusCode();
388355
return await response.Content.ReadAsAsync<HostStatus>();
389356
}
390357

391-
public string GenerateAdminJwtToken()
392-
{
393-
var tokenHandler = new JwtSecurityTokenHandler();
394-
string defaultKey = Util.GetDefaultKeyValue();
395-
var key = Encoding.ASCII.GetBytes(defaultKey);
396-
var tokenDescriptor = new SecurityTokenDescriptor
397-
{
398-
Audience = string.Format(ScriptConstants.AdminJwtValidAudienceFormat, Environment.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteName)),
399-
Issuer = string.Format(ScriptConstants.AdminJwtValidIssuerFormat, Environment.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteName)),
400-
Expires = DateTime.UtcNow.AddHours(1),
401-
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
402-
};
403-
var token = tokenHandler.CreateToken(tokenDescriptor);
404-
string tokenHeaderValue = tokenHandler.WriteToken(token);
405-
406-
return tokenHeaderValue;
407-
}
408-
409358
public void Dispose()
410359
{
411360
if (!_isDisposed)

test/WebJobs.Script.Tests.Integration/TestScripts/CSharp/HttpTrigger-FunctionAuth/function.json

Lines changed: 0 additions & 16 deletions
This file was deleted.

test/WebJobs.Script.Tests.Integration/TestScripts/CSharp/HttpTrigger-FunctionAuth/run.csx

Lines changed: 0 additions & 4 deletions
This file was deleted.

test/WebJobs.Script.Tests.Integration/TestScripts/CSharp/HttpTrigger-Scenarios/run.csx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
using System;
44
using System.Net;
5-
using System.Web;
65
using Newtonsoft.Json;
76
using Newtonsoft.Json.Linq;
87

@@ -14,10 +13,6 @@ public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, Execut
1413

1514
switch (scenario)
1615
{
17-
case "swa":
18-
var query = HttpUtility.ParseQueryString(req.RequestUri.Query ?? string.Empty);
19-
var code = query["code"];
20-
return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(code) };
2116
case "appServiceFixupMiddleware":
2217
return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(req.RequestUri.ToString()) };
2318
case "appInsights-Success":

test/WebJobs.Script.Tests.Integration/WebHostEndToEnd/EndToEndTestFixture.cs

Lines changed: 8 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,15 @@ public abstract class EndToEndTestFixture : IAsyncLifetime
3535
private string _functionsWorkerRuntime;
3636
private int _workerProcessCount;
3737
private string _functionsWorkerRuntimeVersion;
38-
private bool _addTestSettings;
3938

40-
protected EndToEndTestFixture(string rootPath, string testId,
41-
string functionsWorkerRuntime,
42-
int workerProcessesCount = 1,
43-
string functionsWorkerRuntimeVersion = null,
44-
bool addTestSettings = true)
39+
protected EndToEndTestFixture(string rootPath, string testId, string functionsWorkerRuntime, int workerProcessesCount = 1, string functionsWorkerRuntimeVersion = null)
4540
{
4641
FixtureId = testId;
4742

4843
_rootPath = rootPath;
4944
_functionsWorkerRuntime = functionsWorkerRuntime;
5045
_workerProcessCount = workerProcessesCount;
5146
_functionsWorkerRuntimeVersion = functionsWorkerRuntimeVersion;
52-
_addTestSettings = addTestSettings;
5347
}
5448

5549
public CloudBlobContainer TestInputContainer { get; private set; }
@@ -132,7 +126,7 @@ string GetDestPath(int counter)
132126
FunctionsSyncManagerMock = new Mock<IFunctionsSyncManager>(MockBehavior.Strict);
133127
FunctionsSyncManagerMock.Setup(p => p.TrySyncTriggersAsync(It.IsAny<bool>())).ReturnsAsync(new SyncTriggersResult { Success = true });
134128

135-
Host = new TestFunctionHost(_copiedRootPath, logPath, addTestSettings: _addTestSettings,
129+
Host = new TestFunctionHost(_copiedRootPath, logPath,
136130
configureScriptHostWebJobsBuilder: webJobsBuilder =>
137131
{
138132
ConfigureScriptHost(webJobsBuilder);
@@ -141,35 +135,23 @@ string GetDestPath(int counter)
141135
{
142136
s.AddSingleton<IFunctionsSyncManager>(_ => FunctionsSyncManagerMock.Object);
143137
s.AddSingleton<IMetricsLogger>(_ => MetricsLogger);
144-
ConfigureScriptHost(s);
145-
},
146-
configureScriptHostAppConfiguration: configBuilder =>
147-
{
148-
ConfigureScriptHost(configBuilder);
149138
},
150139
configureWebHostServices: s =>
151140
{
152141
s.AddSingleton<IEventGenerator>(_ => EventGenerator);
153142
ConfigureWebHost(s);
154-
},
155-
configureWebHostAppConfiguration: configBuilder =>
156-
{
157-
ConfigureWebHost(configBuilder);
158143
});
159144

160145
string connectionString = Host.JobHostServices.GetService<IConfiguration>().GetWebJobsConnectionString(ConnectionStringNames.Storage);
161-
if (!string.IsNullOrEmpty(connectionString))
162-
{
163-
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
146+
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
164147

165-
QueueClient = storageAccount.CreateCloudQueueClient();
166-
BlobClient = storageAccount.CreateCloudBlobClient();
148+
QueueClient = storageAccount.CreateCloudQueueClient();
149+
BlobClient = storageAccount.CreateCloudBlobClient();
167150

168-
TableStorageAccount tableStorageAccount = TableStorageAccount.Parse(connectionString);
169-
TableClient = tableStorageAccount.CreateCloudTableClient();
151+
TableStorageAccount tableStorageAccount = TableStorageAccount.Parse(connectionString);
152+
TableClient = tableStorageAccount.CreateCloudTableClient();
170153

171-
await CreateTestStorageEntities();
172-
}
154+
await CreateTestStorageEntities();
173155

174156
MasterKey = await Host.GetMasterKeyAsync();
175157
}
@@ -178,22 +160,10 @@ public virtual void ConfigureScriptHost(IWebJobsBuilder webJobsBuilder)
178160
{
179161
}
180162

181-
public virtual void ConfigureScriptHost(IServiceCollection services)
182-
{
183-
}
184-
185-
public virtual void ConfigureScriptHost(IConfigurationBuilder configBuilder)
186-
{
187-
}
188-
189163
public virtual void ConfigureWebHost(IServiceCollection services)
190164
{
191165
}
192166

193-
public virtual void ConfigureWebHost(IConfigurationBuilder configBuilder)
194-
{
195-
}
196-
197167
public async Task<CloudQueue> GetNewQueue(string queueName)
198168
{
199169
var queue = QueueClient.GetQueueReference(string.Format("{0}-{1}", queueName, FixtureId));

0 commit comments

Comments
 (0)