public async Task <ProviderUserDetails> GetGoogleDetailsAsync(string providerToken) { var httpClient = new HttpClient(); var requestUri = new Uri(string.Format(GoogleApiTokenInfoUrl, providerToken)); var tokenInfoResponse = await getHttpResponseResult(GoogleApiTokenInfoUrl, providerToken, "GOOGLE"); GoogleApiTokenInfo googleApiTokenInfo = JsonConvert.DeserializeObject <GoogleApiTokenInfo>(tokenInfoResponse.ToString()); var googleUserInfoResponse = await getHttpResponseResult(GoogleApiUserInfoUrl, providerToken, "GOOGLE", googleApiTokenInfo.sub); GooglePersonInfo googleUserInfo = JsonConvert.DeserializeObject <GooglePersonInfo>(googleUserInfoResponse); /* if (!SupportedClientsIds.Contains(googleApiTokenInfo.aud)) * { * Log.WarnFormat("Google API Token Info aud field ({0}) not containing the required client id", googleApiTokenInfo.aud); * return null; * } */ return(new ProviderUserDetails { Email = googleApiTokenInfo.email ?? "NONE", FirstName = googleApiTokenInfo.given_name ?? googleUserInfo.name["givenName"] ?? "NOT AVAILABLE", LastName = googleApiTokenInfo.family_name ?? googleUserInfo.name["familyName"] ?? "NOT AVAILABLE", Locale = googleApiTokenInfo.locale ?? "EN-us", Name = googleApiTokenInfo.name ?? $"{googleUserInfo.name["givenName"]} {googleUserInfo.name["familyName"]}", ProviderUserId = googleApiTokenInfo.sub ?? googleUserInfo.id }); }
public async Task <IActionResult> Login([FromBody] LoginAuthRequest loginRequest) { GoogleApiTokenInfo tokenInfo = await ValidateGoogleTokenAsync(loginRequest.AccessToken); if (tokenInfo.UserId is null) { return(BadRequest("The access token was invalid")); } var user = await _context.AppUser .SingleOrDefaultAsync(x => x.AuthId == tokenInfo.UserId); if (user is null) { return(BadRequest("User does not exist")); } await _signInManager.SignInAsync(user, false); var claims = await _userManager.GetClaimsAsync(user); var token = _jwtAuthManager.GenerateToken(claims, DateTime.Now); return(Ok(new{ token })); }
public static string VerifyIdToken(string idToken) { HttpClient httpclient = new HttpClient(); Uri requestUri = new Uri(string.Format(GOOGLE_API_TOKEN_VERIFIER_URL, idToken)); HttpResponseMessage responseMessage; try { responseMessage = httpclient.GetAsync(requestUri).Result; } catch { return(null); } if (responseMessage.StatusCode != HttpStatusCode.OK) { return(null); } string response = responseMessage.Content.ReadAsStringAsync().Result; GoogleApiTokenInfo googleTokenInfo = JsonConvert.DeserializeObject <GoogleApiTokenInfo>(response); if (!googleTokenInfo.aud.Equals(CLIENT_ID)) { return(null); } return(googleTokenInfo.email); }
public async void VerifyToken(string providerToken) { await Task.Run(() => { var httpClient = new HttpClient(); var requestUri = new Uri(string.Format(GoogleApiTokenInfoUrl, providerToken)); HttpResponseMessage httpResponseMessage = new HttpResponseMessage(); try { httpResponseMessage = httpClient.GetAsync(requestUri).Result; } catch (Exception) { verifyToken = false; } if (httpResponseMessage.StatusCode != HttpStatusCode.OK) { verifyToken = false; } var response = httpResponseMessage.Content.ReadAsStringAsync().Result; googleApiTokenInfo = JsonConvert.DeserializeObject <GoogleApiTokenInfo>(response); verifyToken = true; }); }
public IActionResult ValidateToken(string authToken) { var validPayload = GoogleJsonWebSignature.ValidateAsync(authToken); if (validPayload == null) { return(StatusCode(StatusCodes.Status403Forbidden, new { response = string.Empty, message = GlobalErrorMessages.INVALID_TOKEN })); } var requestUri = new Uri(string.Format(GoogleApiTokenInfoUrl, authToken)); HttpResponseMessage httpResponseMessage; using (var httpClient = new HttpClient()) { try { httpResponseMessage = httpClient.GetAsync(requestUri).Result; } catch (Exception ex) { return(StatusCode(StatusCodes.Status400BadRequest, new { response = string.Empty, message = ex.InnerException.Message ?? ex.Message })); } } if (httpResponseMessage.StatusCode != HttpStatusCode.OK) { return(StatusCode(StatusCodes.Status403Forbidden, new { response = string.Empty, message = GlobalErrorMessages.INVALID_TOKEN })); } var response = httpResponseMessage.Content.ReadAsStringAsync().Result; GoogleApiTokenInfo userInfo = JsonConvert.DeserializeObject <GoogleApiTokenInfo>(response); if (_config.GetSection("GoogleClientId").Value.ToString() != userInfo.aud.ToString()) { return(StatusCode(StatusCodes.Status403Forbidden, new { response = string.Empty, message = GlobalErrorMessages.INVALID_TOKEN })); } if (userInfo != null && !String.IsNullOrEmpty(userInfo.email)) { if (!userInfo.email.Contains(_config.GetSection("CompanyDomain").Value.ToString())) { return(StatusCode(StatusCodes.Status403Forbidden, new { response = string.Empty, message = GlobalErrorMessages.INVALID_EMAIL_ADDRESS })); } /// Check user register or not CheckUserExistWithEmailAndAdd UserDTO objUser = new UserDTO(); objUser.Email = userInfo.email; objUser.FirstName = userInfo.name.Split(' ')[0]; objUser.LastName = userInfo.name.Split(' ')[1]; objUser.UserName = userInfo.email; objUser.LoginProvider = Enumaration.LoginProvide.Google.ToString(); objUser.ProfileImage = userInfo.picture; UserDTO checkUser = _accountApplication.CheckUserExistWithEmailAndAdd(objUser); } return(Ok()); }