Skip to content

Commit 4028601

Browse files
VpOfEngineeringmathewcazfuncgh
authored
4.28.1 hotfix (#9703)
* Adjusting token auth failure logging (#9701) * 4.28.1 - increase patch version --------- Co-authored-by: Mathew Charles <[email protected]> Co-authored-by: azfuncgh <[email protected]>
1 parent a933c9e commit 4028601

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

build/common.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<LangVersion>latest</LangVersion>
66
<MajorVersion>4</MajorVersion>
77
<MinorVersion>28</MinorVersion>
8-
<PatchVersion>0</PatchVersion>
8+
<PatchVersion>1</PatchVersion>
99
<BuildNumber Condition="'$(BuildNumber)' == '' ">0</BuildNumber>
1010
<PreviewVersion></PreviewVersion>
1111

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using Microsoft.Azure.WebJobs.Extensions.Http;
1313
using Microsoft.Azure.WebJobs.Script;
1414
using Microsoft.Azure.WebJobs.Script.Config;
15+
using Microsoft.Azure.WebJobs.Script.Extensions;
1516
using Microsoft.Azure.WebJobs.Script.WebHost;
1617
using Microsoft.Azure.WebJobs.Script.WebHost.Security.Authentication;
1718
using Microsoft.Extensions.Logging;
@@ -155,6 +156,11 @@ private static bool AudienceValidator(IEnumerable<string> audiences, SecurityTok
155156

156157
private static void LogAuthenticationFailure(AuthenticationFailedContext context)
157158
{
159+
if (!context.Request.IsAdminRequest())
160+
{
161+
return;
162+
}
163+
158164
var loggerFactory = context.HttpContext.RequestServices.GetRequiredService<ILoggerFactory>();
159165
var logger = loggerFactory.CreateLogger(ScriptConstants.LogCategoryHostAuthentication);
160166

@@ -172,7 +178,7 @@ private static void LogAuthenticationFailure(AuthenticationFailedContext context
172178
break;
173179
}
174180

175-
logger.LogError(context.Exception, message);
181+
logger.LogDebug(context.Exception, message);
176182
}
177183
}
178184
}

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

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using Microsoft.Extensions.DependencyInjection;
1515
using Microsoft.Extensions.DependencyInjection.Extensions;
1616
using Microsoft.Extensions.Logging;
17+
using Newtonsoft.Json;
1718
using Xunit;
1819

1920
namespace Microsoft.Azure.WebJobs.Script.Tests.Integration.WebHostEndToEnd
@@ -84,7 +85,7 @@ public async Task InvokeAdminApi_InvalidAudience_Fails(string headerName)
8485
var response = await _fixture.Host.HttpClient.SendAsync(request);
8586
Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);
8687

87-
var validationError = _fixture.Host.GetScriptHostLogMessages().Single(p => p.Level == LogLevel.Error);
88+
var validationError = _fixture.Host.GetScriptHostLogMessages().Single(p => p.Level == LogLevel.Debug);
8889
Assert.Equal(ScriptConstants.LogCategoryHostAuthentication, validationError.Category);
8990
Assert.Equal("Token audience validation failed for audience 'invalid'.", validationError.FormattedMessage);
9091
Assert.True(validationError.Exception.Message.StartsWith("IDX10231: Audience validation failed."));
@@ -112,7 +113,7 @@ public async Task InvokeAdminApi_InvalidIssuer_Fails(string headerName)
112113
var response = await _fixture.Host.HttpClient.SendAsync(request);
113114
Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);
114115

115-
var validationError = _fixture.Host.GetScriptHostLogMessages().Single(p => p.Level == LogLevel.Error);
116+
var validationError = _fixture.Host.GetScriptHostLogMessages().Single(p => p.Level == LogLevel.Debug);
116117
Assert.Equal(ScriptConstants.LogCategoryHostAuthentication, validationError.Category);
117118
Assert.Equal("Token issuer validation failed for issuer 'invalid'.", validationError.FormattedMessage);
118119
Assert.Equal("IDX10205: Issuer validation failed.", validationError.Exception.Message);
@@ -142,7 +143,7 @@ public async Task InvokeAdminApi_InvalidSignature_Fails(string headerName)
142143
var response = await _fixture.Host.HttpClient.SendAsync(request);
143144
Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);
144145

145-
var validationError = _fixture.Host.GetScriptHostLogMessages().Single(p => p.Level == LogLevel.Error);
146+
var validationError = _fixture.Host.GetScriptHostLogMessages().Single(p => p.Level == LogLevel.Debug);
146147
Assert.Equal(ScriptConstants.LogCategoryHostAuthentication, validationError.Category);
147148
Assert.Equal("Token validation failed.", validationError.FormattedMessage);
148149
Assert.True(validationError.Exception.Message.StartsWith("IDX10503: Signature validation failed."));
@@ -160,6 +161,22 @@ public async Task InvokeAdminApi_ValidToken_UTF8Encoding_Succeeds()
160161
response.EnsureSuccessStatusCode();
161162
}
162163

164+
[Fact]
165+
public async Task InvokeNonAdminApi_InvalidToken_DoesNotLogTokenAuthFailure()
166+
{
167+
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, $"api/HttpTrigger-Scenarios?code=test");
168+
request.Content = new StringContent(JsonConvert.SerializeObject(new { scenario = "staticWebApp" }));
169+
string key = SecretsUtility.GetEncryptionKeyValue();
170+
string token = _fixture.Host.GenerateAdminJwtToken(issuer: "invalid");
171+
request.Headers.Add(ScriptConstants.SiteTokenHeaderName, token);
172+
173+
var response = await _fixture.Host.HttpClient.SendAsync(request);
174+
response.EnsureSuccessStatusCode();
175+
176+
var validationErrors = _fixture.Host.GetScriptHostLogMessages().Where(p => p.Category == ScriptConstants.LogCategoryHostAuthentication).ToArray();
177+
Assert.Empty(validationErrors);
178+
}
179+
163180
public class TestFixture : EndToEndTestFixture
164181
{
165182
private TestScopedEnvironmentVariable _scopedEnvironment;

0 commit comments

Comments
 (0)