mirror of https://github.com/abpframework/abp.git
2 changed files with 33 additions and 1 deletions
@ -0,0 +1,31 @@ |
|||||
|
using System; |
||||
|
using System.Globalization; |
||||
|
using Microsoft.AspNetCore.Authentication; |
||||
|
using Microsoft.AspNetCore.Authentication.Cookies; |
||||
|
|
||||
|
namespace Microsoft.Extensions.DependencyInjection; |
||||
|
|
||||
|
public static class CookieAuthenticationOptionsExtensions |
||||
|
{ |
||||
|
public static CookieAuthenticationOptions CheckTokenExpiration(this CookieAuthenticationOptions options, TimeSpan? advance = null) |
||||
|
{ |
||||
|
advance ??= TimeSpan.FromMinutes(5); |
||||
|
var originalHandler = options.Events.OnValidatePrincipal; |
||||
|
options.Events.OnValidatePrincipal = async principalContext => |
||||
|
{ |
||||
|
originalHandler?.Invoke(principalContext); |
||||
|
if (principalContext.Principal != null && principalContext.Principal.Identity != null && principalContext.Principal.Identity.IsAuthenticated) |
||||
|
{ |
||||
|
var tokenExpiresAt = principalContext.Properties.Items[".Token.expires_at"]; |
||||
|
if (tokenExpiresAt != null && |
||||
|
DateTimeOffset.TryParseExact(tokenExpiresAt, "o", null, DateTimeStyles.RoundtripKind, out var expiresAt) && |
||||
|
expiresAt < DateTimeOffset.UtcNow.Subtract(advance.Value)) |
||||
|
{ |
||||
|
principalContext.RejectPrincipal(); |
||||
|
await principalContext.HttpContext.SignOutAsync(principalContext.Scheme.Name); |
||||
|
} |
||||
|
} |
||||
|
}; |
||||
|
return options; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue