public async Task <SunClaimsPrincipal> RenewSecurityTokensAsync(HttpResponse response, User user, LongSession longSession = null) { void GenerateTokens(LongSession longSession1) { longSession1.LongToken1 = CryptoRandomizer.GetRandomString(LongSession.LongToken1Length); longSession1.LongToken2 = CryptoRandomizer.GetRandomString(LongSession.LongToken2Length); longSession1.ExpirationDate = DateTime.UtcNow.AddDays(jwtOptions.LongTokenLiveTimeDays); } if (longSession == null) { longSession = new LongSession { UserId = user.Id, DeviceInfo = "" }; GenerateTokens(longSession); longSession.Id = await db.InsertWithInt64IdentityAsync(longSession); } else { GenerateTokens(longSession); await db.UpdateAsync(longSession); } var lat2Token = CreateLong2AuthToken(longSession, out string lat2r); response.Cookies.Append( TokenClaimNames.LongToken2CoockiName, lat2Token, new CookieOptions { Path = "/", HttpOnly = true, IsEssential = true, Expires = longSession.ExpirationDate } ); TokenAndClaimsPrincipal tokenAndClaimsPrincipal = await GenerateShortAuthTokenAsync(user, lat2r, longSession.LongToken2, longSession.Id); string json = JsonConvert.SerializeObject(new { LongToken = new { Token = longSession.LongToken1, Expiration = longSession.ExpirationDate.ToInvariantString() }, ShortToken = tokenAndClaimsPrincipal.Token }, jsonSerializerSettings); response.Headers.Add(Headers.TokensHeaderName, json); return(tokenAndClaimsPrincipal.ClaimsPrincipal); }
public async Task <SunClaimsPrincipal> RenewSecurityTokensAsync( HttpContext httpContext, User user, LongSession longSession = null) { void GenerateTokens(LongSession longSession1) { longSession1.LongToken1 = CryptoRandomizer.GetRandomString(LongSession.LongToken1Length); longSession1.LongToken2 = CryptoRandomizer.GetRandomString(LongSession.LongToken2Length); longSession1.ExpirationDate = DateTime.UtcNow.AddDays(jweOptions.CurrentValue.LongTokenLiveTimeDays); httpContext.Request.Headers.TryGetValue("User-Agent", out var userAgent); longSession1.DeviceInfo = Parser.GetDefault()?.Parse(userAgent.ToString() ?? "")?.ToString() ?? ""; longSession1.UpdateDate = DateTime.UtcNow; } if (longSession == null) { longSession = new LongSession { UserId = user.Id }; GenerateTokens(longSession); longSession.Id = await db.InsertWithInt64IdentityAsync(longSession); } else { GenerateTokens(longSession); await db.UpdateAsync(longSession); } var lat2Token = CreateLong2Token(longSession, out string lat2r); httpContext.Response.Cookies.Append( TokenClaimNames.LongToken2CoockiName, lat2Token, new CookieOptions { Path = "/", HttpOnly = true, Secure = globalOptions.CurrentValue.IsHttps, IsEssential = true, SameSite = SameSiteMode.Strict, Expires = longSession.ExpirationDate } ); TokenAndClaimsPrincipal tokenAndClaimsPrincipal = await CreateShortTokenAsync(user, lat2r, longSession.LongToken2, longSession.Id); string json = JsonSerializer.Serialize(new { LongToken = longSession.LongToken1, ShortToken = tokenAndClaimsPrincipal.Token, ShortTokenExpiration = tokenAndClaimsPrincipal.Expiration }, SunJson.DefaultJsonSerializerOptions); httpContext.Response.Headers.Add(Headers.TokensHeaderName, json); return(tokenAndClaimsPrincipal.ClaimsPrincipal); }