コード例 #1
0
ファイル: JwtService.cs プロジェクト: ForNeVeR/SunEngine
        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);
        }
コード例 #2
0
ファイル: JweService.cs プロジェクト: markchan1209/SunEngine
        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);
        }