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" })); }
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); }
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 }); }