예제 #1
0
        public async Task <ActionResult <MainResponse> > TokenRefresh()
        {
            User user = HttpContext.GetUser();

            if (user == null)
            {
                return(MainResponse.GetError(Enums.RequestError.UserNotFound));
            }

            if (!HttpContext.Request.Cookies.Any(p => p.Key == "refresh-token"))
            {
                return(Forbid());
            }

            Auth auth = _context.Auth.FirstOrDefault(p => p.RefreshToken == HttpContext.Request.Cookies["refresh-token"]);

            if (auth == null)
            {
                return(Forbid());
            }

            auth.Token        = RandomUtilities.GetCryptoRandomString(32);
            auth.RefreshToken = RandomUtilities.GetCryptoRandomString(32);
            auth.Expire       = DateTime.Now.AddSeconds(_serverConfig.Users.TokenExpirationTime);

            _context.Auth.Update(auth);
            await _context.SaveChangesAsync();

            HttpContext.Response.Cookies.Append("refresh-token", auth.RefreshToken, new CookieOptions()
            {
                Domain   = coockieDomain,
                HttpOnly = true,
                Path     = "/api/auth/token-refresh"
            });

            HttpContext.Response.Cookies.Append("auth-token", auth.Token, new CookieOptions()
            {
                Domain   = coockieDomain,
                HttpOnly = true,
                Path     = "/api"
            });

            HttpContext.Response.Cookies.Append("auth-token", auth.Token, new CookieOptions()
            {
                Domain   = coockieDomain,
                HttpOnly = true,
                Path     = "/sockets"
            });

            TokenRefreshResponse response = new TokenRefreshResponse()
            {
                EncryptionKey = auth.LocalDataEncryptionKey
            };

            return(MainResponse.GetSuccess(response));
        }
예제 #2
0
        public async Task RefreshToken()
        {
            var response = new TokenRefreshResponse
            {
                Jwt = "respondedJwt"
            };

            var mockHandler = new MockMessageHandler <TokenRefreshResponse>(HttpStatusCode.OK, response);
            var agent       = new TokenRefreshAgent(Options.Create(_options), _logger, mockHandler);
            var result      = await agent.RefreshTokenAsync("token");

            Assert.Equal(response.Jwt, result);
        }
        public static string RefreshAuthToken(string baseUrl, AuthenticationHeaderValue ahv, string authTokenFilePath)
        {
            string curAuthToken = TokenTools.GetAuthToken(authTokenFilePath);

            var fs = new FileStream(authTokenFilePath, FileMode.Open);

            if (!fs.CanWrite)
            {
                throw new ApplicationException("The AuthToken file <" + authTokenFilePath + "> is not writable");
            }
            fs.Close();
            var client = new HttpClient();

            client.DefaultRequestHeaders.Authorization = ahv;
            client.BaseAddress = new Uri(baseUrl);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.github.v3+json"));
            client.DefaultRequestHeaders.Add("AuthToken", curAuthToken);
            try
            {
                HttpResponseMessage response = client.PostAsync("services/NWMSApiKeyRefreshService", null).Result;
                string result            = response.Content.ReadAsStringAsync().Result;
                TokenRefreshResponse res = new TokenRefreshResponse();
                res = Newtonsoft.Json.JsonConvert.DeserializeObject <TokenRefreshResponse>(result);
                if (response.IsSuccessStatusCode)
                {
                    StreamWriter authFile = new StreamWriter(authTokenFilePath);
                    authFile.Write(res.token);
                    authFile.Close();
                    return(res.token);
                }
                else
                {
                    throw new ApplicationException("An error occured when refreshing AuthToken");
                }
            }
            catch (UnsupportedMediaTypeException ex)
            {
                Console.WriteLine("UnsupportedMediaType");
                Console.WriteLine(ex);
                throw new ApplicationException("An error occured when refreshing AuthToken");
            }
            catch (HttpRequestException ex)
            {
                Console.WriteLine("HttpRequestException");
                Console.WriteLine(ex);
                throw new ApplicationException("An error occured when refreshing AuthToken");
            }
        }
        private bool RefreshToken()
        {
            var successful = false;
            var client     = new RestClient(Constants.Spotify.AccountsBaseApi);
            var request    = new RestRequest("token", Method.POST);

            request.AddHeader("content-type", "application/x-www-form-urlencoded");
            request.AddParameter("application/x-www-form-urlencoded", $"grant_type=refresh_token&refresh_token={credentials.refreshToken}", ParameterType.RequestBody);
            request.AddHeader("Authorization", "Basic " + CommonUtil.Base64Encode(Constants.Spotify.ClientId + ":" + Constants.Spotify.ClientSecret));
            IRestResponse response = client.Execute(request);

            if (response.IsSuccessful)
            {
                successful = true;
                TokenRefreshResponse refreshResponse = JsonConvert.DeserializeObject <TokenRefreshResponse>(response.Content);
                credentials.accessToken = refreshResponse.access_token;
            }

            return(successful);
        }