@@ -14,16 +14,14 @@ namespace Microsoft.AspNetCore.Authentication.BearerToken;
1414internal sealed class BearerTokenHandler ( IOptionsMonitor < BearerTokenOptions > optionsMonitor , ILoggerFactory loggerFactory , UrlEncoder urlEncoder )
1515 : SignInAuthenticationHandler < BearerTokenOptions > ( optionsMonitor , loggerFactory , urlEncoder )
1616{
17- private static readonly long OneSecondTicks = TimeSpan . FromSeconds ( 1 ) . Ticks ;
18-
1917 private static readonly AuthenticateResult FailedUnprotectingToken = AuthenticateResult . Fail ( "Unprotected token failed" ) ;
2018 private static readonly AuthenticateResult TokenExpired = AuthenticateResult . Fail ( "Token expired" ) ;
2119
2220 private new BearerTokenEvents Events => ( BearerTokenEvents ) base . Events ! ;
2321
2422 protected override async Task < AuthenticateResult > HandleAuthenticateAsync ( )
2523 {
26- // Give application opportunity to find from a different location, adjust, or reject token
24+ // Give application opportunity to find from a different location, adjust, or reject token.
2725 var messageReceivedContext = new MessageReceivedContext ( Context , Scheme , Options ) ;
2826
2927 await Events . MessageReceivedAsync ( messageReceivedContext ) ;
@@ -66,12 +64,12 @@ protected override async Task HandleSignInAsync(ClaimsPrincipal user, Authentica
6664 var utcNow = TimeProvider . GetUtcNow ( ) ;
6765
6866 properties ??= new ( ) ;
69- properties . ExpiresUtc ?? = utcNow + Options . BearerTokenExpiration ;
67+ properties . ExpiresUtc = utcNow + Options . BearerTokenExpiration ;
7068
7169 var response = new AccessTokenResponse
7270 {
7371 AccessToken = Options . BearerTokenProtector . Protect ( CreateBearerTicket ( user , properties ) ) ,
74- ExpiresInSeconds = CalculateExpiresInSeconds ( utcNow , properties . ExpiresUtc ) ,
72+ ExpiresInSeconds = ( long ) Options . BearerTokenExpiration . TotalSeconds ,
7573 RefreshToken = Options . RefreshTokenProtector . Protect ( CreateRefreshTicket ( user , utcNow ) ) ,
7674 } ;
7775
@@ -92,24 +90,6 @@ protected override async Task HandleSignInAsync(ClaimsPrincipal user, Authentica
9290 : null ;
9391 }
9492
95- private long CalculateExpiresInSeconds ( DateTimeOffset utcNow , DateTimeOffset ? expiresUtc )
96- {
97- static DateTimeOffset FloorSeconds ( DateTimeOffset dateTimeOffset )
98- => new ( dateTimeOffset . Ticks / OneSecondTicks * OneSecondTicks , dateTimeOffset . Offset ) ;
99-
100- // AuthenticationProperties floors ExpiresUtc. If this remains unchanged, we'll use BearerTokenExpiration directly
101- // to produce a consistent ExpiresInTotalSeconds values. If ExpiresUtc was overridden, we just calculate the
102- // the difference from utcNow and round even though this will likely result in unstable values.
103- var expiresTimeSpan = Options . BearerTokenExpiration ;
104- var expectedExpiresUtc = FloorSeconds ( utcNow + expiresTimeSpan ) ;
105- return ( long ) ( expiresUtc switch
106- {
107- DateTimeOffset d when d == expectedExpiresUtc => expiresTimeSpan . TotalSeconds ,
108- DateTimeOffset d => ( d - utcNow ) . TotalSeconds ,
109- _ => expiresTimeSpan . TotalSeconds ,
110- } ) ;
111- }
112-
11393 private AuthenticationTicket CreateBearerTicket ( ClaimsPrincipal user , AuthenticationProperties properties )
11494 => new ( user , properties , $ "{ Scheme . Name } :AccessToken") ;
11595
0 commit comments