Skip to content

Commit f5350c3

Browse files
committed
PR feedback
1 parent 1cec21f commit f5350c3

File tree

4 files changed

+29
-20
lines changed

4 files changed

+29
-20
lines changed

src/Http/Authentication.Core/src/AuthenticationMetrics.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,28 @@ public AuthenticationMetrics(IMeterFactory meterFactory)
2626
_authenticatedRequestDuration = _meter.CreateHistogram<double>(
2727
"aspnetcore.authentication.request.duration",
2828
unit: "{request}",
29-
description: "The total number of requests for which authentication was attempted",
29+
description: "The total number of requests for which authentication was attempted.",
3030
advice: new() { HistogramBucketBoundaries = MetricsConstants.ShortSecondsBucketBoundaries });
3131

3232
_challengeCount = _meter.CreateCounter<long>(
3333
"aspnetcore.authentication.challenges",
3434
unit: "{request}",
35-
description: "The total number of times a scheme is challenged");
35+
description: "The total number of times a scheme is challenged.");
3636

3737
_forbidCount = _meter.CreateCounter<long>(
3838
"aspnetcore.authentication.forbids",
3939
unit: "{request}",
40-
description: "The total number of times an authenticated user attempts to access a resource they are not permitted to access");
40+
description: "The total number of times an authenticated user attempts to access a resource they are not permitted to access.");
4141

4242
_signInCount = _meter.CreateCounter<long>(
4343
"aspnetcore.authentication.sign_ins",
4444
unit: "{request}",
45-
description: "The total number of times a principal is signed in");
45+
description: "The total number of times a principal is signed in.");
4646

4747
_signOutCount = _meter.CreateCounter<long>(
4848
"aspnetcore.authentication.sign_outs",
4949
unit: "{request}",
50-
description: "The total number of times a scheme is signed out");
50+
description: "The total number of times a scheme is signed out.");
5151
}
5252

5353
public void AuthenticatedRequestSucceeded(string? scheme, AuthenticateResult result, long startTimestamp, long currentTimestamp)

src/Security/Authorization/Core/src/AuthorizationMetrics.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Diagnostics.Metrics;
88
using System.Linq;
99
using System.Runtime.CompilerServices;
10+
using System.Security.Claims;
1011
using System.Text;
1112
using System.Threading.Tasks;
1213

@@ -26,50 +27,52 @@ public AuthorizationMetrics(IMeterFactory meterFactory)
2627
_authorizedRequestCount = _meter.CreateCounter<long>(
2728
"aspnetcore.authorization.requests",
2829
unit: "{request}",
29-
description: "The total number of requests for which authorization was attempted");
30+
description: "The total number of requests for which authorization was attempted.");
3031
}
3132

32-
public void AuthorizedRequestSucceeded(string? policyName, AuthorizationResult result)
33+
public void AuthorizedRequestSucceeded(ClaimsPrincipal user, string? policyName, AuthorizationResult result)
3334
{
3435
if (_authorizedRequestCount.Enabled)
3536
{
36-
AuthorizedRequestSucceededCore(policyName, result);
37+
AuthorizedRequestSucceededCore(user, policyName, result);
3738
}
3839
}
3940

4041
[MethodImpl(MethodImplOptions.NoInlining)]
41-
private void AuthorizedRequestSucceededCore(string? policyName, AuthorizationResult result)
42+
private void AuthorizedRequestSucceededCore(ClaimsPrincipal user, string? policyName, AuthorizationResult result)
4243
{
4344
var tags = new TagList();
44-
TryAddPolicyTag(ref tags, policyName);
45+
AddAuthorizationTags(ref tags, user, policyName);
4546

4647
var resultTagValue = result.Succeeded ? "success" : "failure";
4748
tags.Add("aspnetcore.authorization.result", resultTagValue);
4849

4950
_authorizedRequestCount.Add(1, tags);
5051
}
5152

52-
public void AuthorizedRequestFailed(string? policyName, Exception exception)
53+
public void AuthorizedRequestFailed(ClaimsPrincipal user, string? policyName, Exception exception)
5354
{
5455
if (_authorizedRequestCount.Enabled)
5556
{
56-
AuthorizedRequestFailedCore(policyName, exception);
57+
AuthorizedRequestFailedCore(user, policyName, exception);
5758
}
5859
}
5960

6061
[MethodImpl(MethodImplOptions.NoInlining)]
61-
private void AuthorizedRequestFailedCore(string? policyName, Exception exception)
62+
private void AuthorizedRequestFailedCore(ClaimsPrincipal user, string? policyName, Exception exception)
6263
{
6364
var tags = new TagList();
64-
TryAddPolicyTag(ref tags, policyName);
65+
AddAuthorizationTags(ref tags, user, policyName);
6566

6667
tags.Add("error.type", exception.GetType().FullName);
6768

6869
_authorizedRequestCount.Add(1, tags);
6970
}
7071

71-
private static void TryAddPolicyTag(ref TagList tags, string? policyName)
72+
private static void AddAuthorizationTags(ref TagList tags, ClaimsPrincipal user, string? policyName)
7273
{
74+
tags.Add("user.is_authenticated", user.Identity?.IsAuthenticated ?? false);
75+
7376
if (policyName is not null)
7477
{
7578
tags.Add("aspnetcore.authorization.policy", policyName);

src/Security/Authorization/Core/src/DefaultAuthorizationServiceImpl.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ public override async Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal u
3030
}
3131
catch (Exception ex)
3232
{
33-
metrics.AuthorizedRequestFailed(policyName: null, ex);
33+
metrics.AuthorizedRequestFailed(user, policyName: null, ex);
3434
throw;
3535
}
3636

37-
metrics.AuthorizedRequestSucceeded(policyName: null, result);
37+
metrics.AuthorizedRequestSucceeded(user, policyName: null, result);
3838
return result;
3939
}
4040

@@ -52,11 +52,11 @@ public override async Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal u
5252
}
5353
catch (Exception ex)
5454
{
55-
metrics.AuthorizedRequestFailed(policyName, ex);
55+
metrics.AuthorizedRequestFailed(user, policyName, ex);
5656
throw;
5757
}
5858

59-
metrics.AuthorizedRequestSucceeded(policyName, result);
59+
metrics.AuthorizedRequestSucceeded(user, policyName, result);
6060
return result;
6161
}
6262
}

src/Security/Authorization/test/AuthorizationMetricsTest.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public async Task Authorize_WithPolicyName_Success()
1717
var meterFactory = new TestMeterFactory();
1818
var authorizationService = BuildAuthorizationService(meterFactory);
1919
var meter = meterFactory.Meters.Single();
20-
var user = new ClaimsPrincipal(new ClaimsIdentity([new Claim("Permission", "CanViewPage")]));
20+
var user = new ClaimsPrincipal(new ClaimsIdentity([new Claim("Permission", "CanViewPage")], authenticationType: "someAuthentication"));
2121

2222
using var authorizedRequestsCollector = new MetricCollector<long>(meterFactory, AuthorizationMetrics.MeterName, "aspnetcore.authorization.requests");
2323

@@ -32,6 +32,7 @@ public async Task Authorize_WithPolicyName_Success()
3232
Assert.Equal(1, measurement.Value);
3333
Assert.Equal("Basic", (string)measurement.Tags["aspnetcore.authorization.policy"]);
3434
Assert.Equal("success", (string)measurement.Tags["aspnetcore.authorization.result"]);
35+
Assert.True((bool)measurement.Tags["user.is_authenticated"]);
3536
}
3637

3738
[Fact]
@@ -56,6 +57,7 @@ public async Task Authorize_WithPolicyName_Failure()
5657
Assert.Equal(1, measurement.Value);
5758
Assert.Equal("Basic", (string)measurement.Tags["aspnetcore.authorization.policy"]);
5859
Assert.Equal("failure", (string)measurement.Tags["aspnetcore.authorization.result"]);
60+
Assert.False((bool)measurement.Tags["user.is_authenticated"]);
5961
}
6062

6163
[Fact]
@@ -80,6 +82,7 @@ public async Task Authorize_WithPolicyName_PolicyNotFound()
8082
Assert.Equal(1, measurement.Value);
8183
Assert.Equal("UnknownPolicy", (string)measurement.Tags["aspnetcore.authorization.policy"]);
8284
Assert.Equal("System.InvalidOperationException", (string)measurement.Tags["error.type"]);
85+
Assert.False((bool)measurement.Tags["user.is_authenticated"]);
8386
Assert.False(measurement.Tags.ContainsKey("aspnetcore.authorization.result"));
8487
}
8588

@@ -107,6 +110,7 @@ public async Task Authorize_WithoutPolicyName_Success()
107110
var measurement = Assert.Single(authorizedRequestsCollector.GetMeasurementSnapshot());
108111
Assert.Equal(1, measurement.Value);
109112
Assert.Equal("success", (string)measurement.Tags["aspnetcore.authorization.result"]);
113+
Assert.False((bool)measurement.Tags["user.is_authenticated"]);
110114
Assert.False(measurement.Tags.ContainsKey("aspnetcore.authorization.policy"));
111115
}
112116

@@ -131,6 +135,7 @@ public async Task Authorize_WithoutPolicyName_Failure()
131135
var measurement = Assert.Single(authorizedRequestsCollector.GetMeasurementSnapshot());
132136
Assert.Equal(1, measurement.Value);
133137
Assert.Equal("failure", (string)measurement.Tags["aspnetcore.authorization.result"]);
138+
Assert.False((bool)measurement.Tags["user.is_authenticated"]);
134139
Assert.False(measurement.Tags.ContainsKey("aspnetcore.authorization.policy"));
135140
}
136141

@@ -159,6 +164,7 @@ public async Task Authorize_WithoutPolicyName_ExceptionThrownInHandler()
159164
var measurement = Assert.Single(authorizedRequestsCollector.GetMeasurementSnapshot());
160165
Assert.Equal(1, measurement.Value);
161166
Assert.Equal("System.InvalidOperationException", (string)measurement.Tags["error.type"]);
167+
Assert.False((bool)measurement.Tags["user.is_authenticated"]);
162168
Assert.False(measurement.Tags.ContainsKey("aspnetcore.authorization.policy"));
163169
Assert.False(measurement.Tags.ContainsKey("aspnetcore.authorization.result"));
164170
}

0 commit comments

Comments
 (0)