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
        });
    }
Esempio n. 2
0
        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());
        }