Skip to content

Commit feb0a49

Browse files
committed
Revert support for no storage account scenario.
1 parent 3e7abdd commit feb0a49

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

@@ -129,10 +123,7 @@ public TestFunctionHost(string scriptPath, string logPath,
129123
})
130124
.ConfigureScriptHostAppConfiguration(scriptHostConfigurationBuilder =>
131125
{
132-
if (addTestSettings)
133-
{
134-
scriptHostConfigurationBuilder.AddTestSettings();
135-
}
126+
scriptHostConfigurationBuilder.AddTestSettings();
136127
configureScriptHostAppConfiguration?.Invoke(scriptHostConfigurationBuilder);
137128
})
138129
.ConfigureScriptHostLogging(scriptHostLoggingBuilder =>
@@ -155,11 +146,7 @@ public TestFunctionHost(string scriptPath, string logPath,
155146
}
156147

157148
config.Add(new ScriptEnvironmentVariablesConfigurationSource());
158-
if (addTestSettings)
159-
{
160-
config.AddTestSettings();
161-
}
162-
configureWebHostAppConfiguration?.Invoke(config);
149+
config.AddTestSettings();
163150
})
164151
.UseStartup<TestStartup>();
165152

@@ -195,9 +182,7 @@ public TestFunctionHost(string scriptPath, string logPath,
195182

196183
public ScriptJobHostOptions ScriptOptions => JobHostServices.GetService<IOptions<ScriptJobHostOptions>>().Value;
197184

198-
public ISecretManagerProvider SecretManagerProvider => _testServer.Host.Services.GetService<ISecretManagerProvider>();
199-
200-
public ISecretManager SecretManager => SecretManagerProvider.Current;
185+
public ISecretManager SecretManager => _testServer.Host.Services.GetService<ISecretManagerProvider>().Current;
201186

202187
public string LogPath => _hostOptions.LogPath;
203188

@@ -207,11 +192,6 @@ public TestFunctionHost(string scriptPath, string logPath,
207192

208193
public async Task<string> GetMasterKeyAsync()
209194
{
210-
if (!SecretManagerProvider.SecretsEnabled)
211-
{
212-
return null;
213-
}
214-
215195
HostSecretsInfo secrets = await SecretManager.GetHostSecretsAsync();
216196
return secrets.MasterKey;
217197
}
@@ -365,44 +345,13 @@ public async Task<FunctionStatus> GetFunctionStatusAsync(string functionName)
365345

366346
public async Task<HostStatus> GetHostStatusAsync()
367347
{
368-
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "admin/host/status");
369-
370-
if (SecretManagerProvider.SecretsEnabled)
371-
{
372-
// use admin key
373-
HostSecretsInfo secrets = await SecretManager.GetHostSecretsAsync();
374-
request.Headers.Add(AuthenticationLevelHandler.FunctionsKeyHeaderName, secrets.MasterKey);
375-
}
376-
else
377-
{
378-
// use admin jwt token
379-
string token = GenerateAdminJwtToken();
380-
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
381-
}
382-
383-
HttpResponseMessage response = await HttpClient.SendAsync(request);
348+
HostSecretsInfo secrets = await SecretManager.GetHostSecretsAsync();
349+
string uri = $"admin/host/status?code={secrets.MasterKey}";
350+
HttpResponseMessage response = await HttpClient.GetAsync(uri);
384351
response.EnsureSuccessStatusCode();
385352
return await response.Content.ReadAsAsync<HostStatus>();
386353
}
387354

388-
public string GenerateAdminJwtToken()
389-
{
390-
var tokenHandler = new JwtSecurityTokenHandler();
391-
string defaultKey = Util.GetDefaultKeyValue();
392-
var key = Encoding.ASCII.GetBytes(defaultKey);
393-
var tokenDescriptor = new SecurityTokenDescriptor
394-
{
395-
Audience = string.Format(ScriptConstants.AdminJwtValidAudienceFormat, Environment.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteName)),
396-
Issuer = string.Format(ScriptConstants.AdminJwtValidIssuerFormat, Environment.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteName)),
397-
Expires = DateTime.UtcNow.AddHours(1),
398-
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
399-
};
400-
var token = tokenHandler.CreateToken(tokenDescriptor);
401-
string tokenHeaderValue = tokenHandler.WriteToken(token);
402-
403-
return tokenHeaderValue;
404-
}
405-
406355
public void Dispose()
407356
{
408357
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)