コード例 #1
0
        public async Task <IActionResult> VerifyToken([FromBody] GoogleAuthResponse res)
        {
            /*Payload payload;
             * try
             * {
             *  payload = await ValidateAsync(res.TokenId, new ValidationSettings
             *  {
             *      Audience = new[] { "1029632734628-0hskb0pputp0bal8p8v7dif1iigfk3uo.apps.googleusercontent.com" }
             *  });
             *  return Ok();
             * }
             * catch(Exception e)
             * {
             *  return BadRequest( e );
             * }*/
            if (res != null)
            {
                InnerToken result = await _Service.CheckLoginGoogle(res);

                if (result.isValid)
                {
                    return(Ok(new { token = result.Token }));
                }
                else
                {
                    return(BadRequest(new { Errors = result.Error }));
                }
            }
            return(BadRequest(new { Error = "Check the format" }));
        }
コード例 #2
0
        protected virtual DateTime ParsePasetoDateTimeClaim(string claimType)
        {
            if (InnerToken.TryGetPayloadValue <string>(claimType, out var claimValue))
            {
                // ISO 8601 format
                if (DateTime.TryParse(claimValue, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.RoundtripKind, out var dateTime))
                {
                    return(dateTime.ToUniversalTime());
                }

                throw new SecurityTokenInvalidLifetimeException($"Unable to parse date time from '{claimType}'. Failing value: '{claimValue}'");
            }

            return(DateTime.MinValue);
        }
コード例 #3
0
ファイル: Security.cs プロジェクト: Hatilar420/PlebChat
        public async Task <TokenResponse> GetRefreshTokenAsync(string Token, string RefreshToken)
        {
            ClaimsPrincipal JwtPrincipal = GetPrincipal(Token);

            if (JwtPrincipal == null)
            {
                return(new TokenResponse {
                    IsValid = false, Errors = new[] { "Cannot initialLize token" }
                });
            }
            string username = JwtPrincipal.Claims.Single(x => x.Type == "Sub").Value;
            long   expiry   = long.Parse(JwtPrincipal.Claims.Single(x => x.Type == JwtRegisteredClaimNames.Exp).Value);

            string email = JwtPrincipal.Claims.Single(x => x.Type == "Email").Value;

            if (expiry > DateTimeOffset.Now.ToUnixTimeSeconds())
            {
                return(new TokenResponse {
                    IsValid = false, Errors = new[] { "Token is not yet expired" }
                });
            }

            string userKey = JwtPrincipal.Claims.Single(x => x.Type == "UserKey").Value;

            RefreshToken refresh = await _Context.refreshTokens.FindAsync(RefreshToken);

            if (refresh == null)
            {
                return(new TokenResponse {
                    IsValid = false, Errors = new[] { "RefreshToken is not issued to this user" }
                });
            }

            if (refresh.ExpiryTime < DateTime.UtcNow)
            {
                return(new TokenResponse {
                    IsValid = false, Errors = new[] { "RefreshToken is expired" }
                });
            }

            if (refresh.IsUsed)
            {
                return(new TokenResponse {
                    IsValid = false, Errors = new[] { "RefreshToken is already Used" }
                });
            }

            if (!refresh.IsValid)
            {
                return(new TokenResponse {
                    IsValid = false, Errors = new[] { "RefreshToken is not valid" }
                });
            }

            if (refresh.UserKey != userKey)
            {
                return(new TokenResponse {
                    IsValid = false, Errors = new[] { "Token Does'nt belong to this user" }
                });
            }

            if (refresh.JwtToken != Token)
            {
                return(new TokenResponse {
                    IsValid = false, Errors = new[] { "Token Does'nt belong to this user" }
                });
            }
            refresh.IsValid = false; refresh.IsUsed = true;
            _Context.refreshTokens.Update(refresh);
            await _Context.SaveChangesAsync();

            InnerToken t = await GetAuthToken(username, userKey, email);

            return(new TokenResponse {
                IsValid = true, Token = t.Token, RefreshToken = t.RefreshToken, UserKey = userKey
            });
        }