Exemple #1
0
        private async Task RefreshAuthToken()
        {
            if (!string.IsNullOrEmpty(Token) && ExpirationTimestamp > DateTime.UtcNow)
            {
                return;
            }

            string AUTH_REQUEST = JsonSerializer.Serialize(new TokenAuthRequest(UserName, Password));

            HttpContent requestBody = new StringContent(AUTH_REQUEST, Encoding.UTF8, APPLICATION_JSON);

            HttpResponseMessage response = await Http.PostAsync("auth/", requestBody);

            string responseBody = await response.Content.ReadAsStringAsync();

            if (!response.IsSuccessStatusCode)
            {
                GetErrorAndThrowException(responseBody, AUTH_TOKEN_ERROR_MESSAGE);
            }

            TokenAuthResponse auth = JsonSerializer.Deserialize <TokenAuthResponse>(responseBody);

            if (auth == null || auth.data == null || auth.data.tokenAuth == null)
            {
                GetErrorAndThrowException(responseBody, AUTH_TOKEN_ERROR_MESSAGE);
            }

            Token                      = auth.data.tokenAuth.token;
            IssuedTimestamp            = DateTime.UnixEpoch + TimeSpan.FromSeconds(auth.data.tokenAuth.payload.origIat);
            ExpirationTimestamp        = DateTime.UnixEpoch + TimeSpan.FromSeconds(auth.data.tokenAuth.payload.exp);
            RefreshExpirationTimestamp = DateTime.UnixEpoch + TimeSpan.FromSeconds(auth.data.tokenAuth.refreshExpiresIn);
        }
Exemple #2
0
        public IActionResult Auth(TokenAuthRequest model)
        {
            return(Result(() =>
            {
                if (model == null)
                {
                    return ApplicationResult.Fail("bad request");
                }
                UserViewModel user;

                switch (model.GrantType)
                {
                case "password":
                    var credentialResult = _userService.GetUserByCredential(model.UserName, model.Password);
                    if (credentialResult.IsSuccess == false)
                    {
                        return credentialResult;
                    }
                    user = credentialResult.Value;
                    break;

                case "refresh_token":
                    var refreshTokenResult = _userService.GetUserByRefreshToken(model.RefreshToken);
                    if (refreshTokenResult.IsSuccess == false)
                    {
                        return refreshTokenResult;
                    }
                    user = refreshTokenResult.Value;
                    break;



                case "signUp":
                case "string":
                    if (!ModelState.IsValid)
                    {
                        return ApplicationResult.Fail(GetModelErrors());
                    }

                    //return user Id
                    var signUpResult = _userService.SignUp(new UserViewModel()
                    {
                        UserName = model.UserName.ToLower(),
                        Email = model.Email,
                        PasswordHash = model.Password,
                        Avatar = model.Avatar,
                        Country = model.Country,
                        SexType = model.SexType,
                        PhoneNumber = model.Phone
                    });

                    if (signUpResult.IsSuccess == false)
                    {
                        return signUpResult;
                    }

                    user = signUpResult.Value;
                    break;

                default:
                    return ApplicationResult.Fail("The grant_type is not support");
                }

                var refreshToken = _userService.GrantRefreshToken(user.Id);
                var accessToken = GenerateJwtToken(user);
                var result = new TokenAuthResponse
                {
                    RefreshToken = refreshToken,
                    AccessToken = accessToken
                };
                return ApplicationResult.Ok(result);
            }));
        }