Exemplo n.º 1
0
 private static void Main(string[] args)
 {
     try
     {
         string      url          = @"http://localhost:53879/";
         string      timestamp    = UnixEpochHelper.GetCurrentUnixTimestamp().TotalMilliseconds.ToString();
         string      nonce        = new Random().NextDouble().ToString();
         string      signature    = SignatureString("XXHHAREJDDF", timestamp, nonce);
         string      appended     = string.Format("&signature={0}&timestamp={1}&nonce={2}&appid={3}", signature, timestamp, nonce, "aabbcc");
         string      queryUrl     = url + "api/Auth?userId=test" + appended;
         TokenResult _tokenResult = WebRequest.HttpGet <TokenResult>(queryUrl, SerializationType.Json);
         Console.WriteLine(_tokenResult.Access_token);
         queryUrl = url + "api/Product/1?token=" + _tokenResult.Access_token;
         string  jsonText = WebRequest.HttpGet(queryUrl);
         JObject jsonObj  = JObject.Parse(jsonText);
         string  aa       = jsonObj["Data"].ToString();
         Console.WriteLine(jsonText);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
     finally
     {
         Console.ReadLine();
     }
 }
Exemplo n.º 2
0
        private static void Main(string[] args)
        {
            try
            {
                CreateAppConfig();
                var apiServiceUrl = "http://localhost:24003/";
                var timestamp     = UnixEpochHelper.GetCurrentUnixTimestamp().TotalMilliseconds
                                    .ToString(CultureInfo.InvariantCulture);
                var nonce     = new Random().NextDouble().ToString(CultureInfo.InvariantCulture);
                var signature = SignatureHelper.Create(_appSecret, timestamp, nonce);
                var appended  =
                    $"&signature={signature}&timestamp={timestamp}&nonce={nonce}&appid={_appId}";

                var queryUrl = apiServiceUrl +
                               "api/Account/GetToken?userId=2c96ff542072420bc8d33bdd73bb9488&passWord=0000" + appended;
                var responeText = SimulateWebRequest.Post(queryUrl, null);
                Console.WriteLine(responeText);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadLine();
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 生成签名字符串
        /// </summary>
        /// <param name="appSecret">签名密钥</param>
        /// <returns>WebApi签名</returns>
        public static string Create(Guid appSecret)
        {
            string timestamp = UnixEpochHelper.GetCurrentUnixTimestamp().TotalMilliseconds.ToString(CultureInfo.InvariantCulture);
            string nonce     = new Random().NextDouble().ToString(CultureInfo.InvariantCulture);

            return(Create(appSecret, timestamp, nonce));
        }
Exemplo n.º 4
0
        /// <summary>
        ///     检查请求签名合法性
        /// </summary>
        /// <param name="signature">加密签名字符串</param>
        /// <param name="timestamp">时间戳</param>
        /// <param name="nonce">随机数</param>
        /// <param name="appConfig">应用接入配置信息</param>
        /// <returns>CheckResult</returns>
        public CheckResult CheckRequestSignature(string signature, string timestamp, string nonce, AppConfig appConfig)
        {
            ValidateOperator.Begin()
            .NotNullOrEmpty(signature, "加密签名字符串")
            .NotNullOrEmpty(timestamp, "时间戳")
            .NotNullOrEmpty(nonce, "随机数")
            .NotNull(appConfig, "AppConfig");
            var appSecret        = appConfig.AppSecret;
            var signatureExpired = appConfig.SignatureExpiredMinutes;

            string[] data = { appSecret, timestamp, nonce };
            Array.Sort(data);
            var signatureText = string.Join("", data);

            signatureText = Md5Encryptor.Encrypt(signatureText);

            if (!signature.CompareIgnoreCase(signatureText) && CheckHelper.IsNumber(timestamp))
            {
                return(CheckResult.Success());
            }
            var timestampMillis =
                UnixEpochHelper.DateTimeFromUnixTimestampMillis(timestamp.ToDoubleOrDefault());
            var minutes = DateTime.UtcNow.Subtract(timestampMillis).TotalMinutes;

            return(minutes > signatureExpired?CheckResult.Fail("签名时间戳失效") : CheckResult.Success());
        }
Exemplo n.º 5
0
        public OperatedResult <string> CheckIdentityToken(string token, AppConfig appConfig)
        {
            ValidateOperator.Begin()
            .NotNullOrEmpty(token, "Token")
            .NotNull(appConfig, "AppConfig");
            try
            {
                var tokenText = ParseTokens(token, appConfig.SharedKey);
                if (string.IsNullOrEmpty(tokenText))
                {
                    return(OperatedResult <string> .Fail("用户令牌Token为空"));
                }

                dynamic root              = JObject.Parse(tokenText);
                string  userid            = root.iss;
                var     iat               = root.iat;
                var     validTokenExpired =
                    new TimeSpan((int)(UnixEpochHelper.GetCurrentUnixTimestamp().TotalSeconds - iat))
                    .TotalDays > appConfig.TokenExpiredDay;
                return(validTokenExpired
                    ? OperatedResult <string> .Fail($"用户ID{userid}令牌失效")
                    : OperatedResult <string> .Success(userid));
            }
            catch (FormatException)
            {
                return(OperatedResult <string> .Fail("用户令牌非法"));
            }
            catch (SignatureVerificationException)
            {
                return(OperatedResult <string> .Fail("用户令牌非法"));
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 检查用户令牌
        /// </summary>
        /// <param name="token">用户令牌</param>
        /// <param name="sharedKey">用于加密解密签名以及用户令牌的Key</param>
        /// <param name="tokenExpiredDays">用户令牌过期天数</param>
        /// <returns>
        /// 检查结果
        /// </returns>
        public Tuple <bool, string> ValidateToken(string token, string sharedKey, int tokenExpiredDays)
        {
            //返回的结果对象
            Tuple <bool, string> _checkeResult = new Tuple <bool, string>(false, "数据完整性检查不通过");

            if (!string.IsNullOrEmpty(token))
            {
                try
                {
                    string _decodedJwt = JsonWebToken.Decode(token, sharedKey);

                    if (!string.IsNullOrEmpty(_decodedJwt))
                    {
                        dynamic _root              = JObject.Parse(_decodedJwt);
                        string  _userid            = _root.userId;
                        double  _jwtcreated        = (double)_root.claim;
                        bool    _validTokenExpired = (new TimeSpan((int)(UnixEpochHelper.GetCurrentUnixTimestamp().TotalSeconds - _jwtcreated)).TotalDays) > tokenExpiredDays;

                        if (_validTokenExpired)
                        {
                            _checkeResult = new Tuple <bool, string>(false, "用户令牌失效.");
                        }

                        _checkeResult = new Tuple <bool, string>(true, _userid);
                    }
                }
                catch (SignatureVerificationException)
                {
                    _checkeResult = new Tuple <bool, string>(false, "用户令牌非法.");
                }
            }

            return(_checkeResult);
        }
Exemplo n.º 7
0
        private Tuple <bool, string> ValidateSignature(string signature, string timestamp, string nonce, string appSecret, int timspanExpiredMinutes)
        {
            Tuple <bool, string> _checkeResult = new Tuple <bool, string>(false, "数据完整性检查不通过");

            string[] _arrayParamter = { appSecret, timestamp, nonce };
            Array.Sort(_arrayParamter);
            string _signatureString = string.Join("", _arrayParamter);

            _signatureString = MD5Encryptor.Encrypt(_signatureString);

            if (signature.CompareIgnoreCase(signature) && CheckHelper.IsNumber(timestamp))
            {
                DateTime _timestampMillis = UnixEpochHelper.DateTimeFromUnixTimestampMillis(timestamp.ToDoubleOrDefault(0f));
                double   _minutes         = DateTime.UtcNow.Subtract(_timestampMillis).TotalMinutes;

                if (_minutes > timspanExpiredMinutes)
                {
                    _checkeResult = new Tuple <bool, string>(false, "签名时间戳失效");
                }
                else
                {
                    _checkeResult = new Tuple <bool, string>(true, string.Empty);
                }
            }

            return(_checkeResult);
        }
Exemplo n.º 8
0
 internal QueryResultsList(long startTimeUtc, long endTimeUtc, long timeResolutionInMilliseconds, IReadOnlyList <QueryResult> results)
 {
     this.StartTimeUtc = UnixEpochHelper.FromMillis(startTimeUtc);
     this.EndTimeUtc   = UnixEpochHelper.FromMillis(endTimeUtc);
     this.TimeResolutionInMilliseconds = timeResolutionInMilliseconds;
     this.Results = results;
 }
Exemplo n.º 9
0
        public void DateTimeFromUnixTimestampMillisTest()
        {
            DateTime _actual   = UnixEpochHelper.DateTimeFromUnixTimestampMillis(1422949956408);
            DateTime _expected = new DateTime(2015, 02, 03, 7, 52, 36);

            Assert.AreEqual(_expected.ToShortDateString(), _actual.ToShortDateString());
            Assert.AreEqual(_expected.ToShortTimeString(), _actual.ToShortTimeString());
            Assert.AreNotEqual(_expected, _actual);
        }
Exemplo n.º 10
0
        private TokenInfo BuilderTokenInfo(UserInfo userInfo, AppInfo appInfo)
        {
            Dictionary <string, object> _payload = new Dictionary <string, object>()
            {
                { "iss", userInfo.UserId },
                { "iat", UnixEpochHelper.GetCurrentUnixTimestamp().TotalSeconds }
            };//负载数据
            TokenInfo _tokenData = new TokenInfo
            {
                Access_token = JwtHelper.CreateTokens(appInfo.SharedKey, _payload),
                Expires_in   = appInfo.TokenExpiredDay * 24 * 3600
            };

            return(_tokenData);
        }
        /// <summary>
        /// Gets the dimension values for dimensionName satifying the dimensionFilters and
        /// </summary>
        /// <param name="metricId">Metric id.</param>
        /// <param name="filters">The dimension filters representing the pre-aggregate dimensions. Create an emtpy include filter for dimension with no filter values. Requested dimension should also be part of this and should be empty.</param>
        /// <param name="dimensionName">Name of the dimension for which values are requested.</param>
        /// <param name="startTimeUtc">Start time for evaluating dimension values.</param>
        /// <param name="endTimeUtc">End time for evaluating dimension values.</param>
        /// <returns>Dimension values for dimensionName.</returns>
        public async Task <IEnumerable <string> > GetDimensionValuesAsync(MetricIdentifier metricId, List <Tuple <string, IEnumerable <string> > > filters, string dimensionName, DateTime startTimeUtc, DateTime endTimeUtc)
        {
            filters.Sort((item1, item2) => string.Compare(item1.Item1, item2.Item1, StringComparison.OrdinalIgnoreCase));

            var baseUrl = string.Format(
                "{0}/api/v2/hint/tenant/{1}/component/{2}/event/{3}/startTimeUtcMillis/{4}/endTimeUtcMillis/{5}",
                Endpoint,
                EscapeTwice(metricId.MonitoringAccount),
                EscapeTwice(metricId.MetricNamespace),
                EscapeTwice(metricId.MetricName),
                UnixEpochHelper.GetMillis(startTimeUtc),
                UnixEpochHelper.GetMillis(endTimeUtc));

            var urlBuilder = new StringBuilder(baseUrl);

            foreach (var filter in filters)
            {
                if (filter.Item1.Equals(dimensionName, StringComparison.OrdinalIgnoreCase) && filter.Item2.Count() > 0)
                {
                    throw new ArgumentException("Dimension filters cannot contain requested dimension with filter values");
                }

                if (filter.Item2.Count() > 0)
                {
                    foreach (var val in filter.Item2)
                    {
                        urlBuilder.Append("/").Append(EscapeTwice(filter.Item1)).Append("/").Append(EscapeTwice(val));
                    }
                }
                else
                {
                    // Put Empty value.
                    urlBuilder.Append("/").Append(EscapeTwice(filter.Item1)).Append("/").Append(EscapeTwice("{{*}}"));
                }
            }

            urlBuilder.Append("/").Append(EscapeTwice(dimensionName)).Append("/value");

            var response = await GetResponse(
                new Uri(urlBuilder.ToString()),
                HttpMethod.Get,
                HttpClient,
                null,
                ClientId).ConfigureAwait(false);

            return(JsonConvert.DeserializeObject <List <string> >(response.Item1));
        }
Exemplo n.º 12
0
        /// <summary>
        ///     创建合法用户获取访问令牌接口数据
        /// </summary>
        /// <param name="identityUser">IdentityUser</param>
        /// <param name="appConfig">AppConfig</param>
        /// <returns>IdentityToken</returns>
        public OperatedResult <IdentityToken> CreateIdentityToken(IdentityUser identityUser, AppConfig appConfig)
        {
            ValidateOperator.Begin()
            .NotNull(identityUser, "IdentityUser")
            .NotNull(appConfig, "AppConfig");
            var payload = new Dictionary <string, object>
            {
                { "iss", identityUser.UserId },
                { "iat", UnixEpochHelper.GetCurrentUnixTimestamp().TotalSeconds }
            };
            var identityToken = new IdentityToken
            {
                AccessToken = CreateIdentityToken(appConfig.SharedKey, payload),
                ExpiresIn   = appConfig.TokenExpiredDay * 24 * 3600
            };

            return(OperatedResult <IdentityToken> .Success(identityToken));
        }
Exemplo n.º 13
0
        /// <summary>
        /// 验证Token令牌是否合法
        /// </summary>
        /// <param name="token">令牌</param>
        /// <param name="appid">应用ID</param>
        /// <returns>CheckResult</returns>
        public OperatedResult <string> ValidateToken(string token, Guid appid)
        {
            CheckResult _checkedParamter = CheckedValidateTokenParamter(token, appid);

            if (!_checkedParamter.State)
            {
                return(OperatedResult <string> .Fail(_checkedParamter.Message));
            }

            CheckResult <AppInfo> _checkedAppChannel = CheckedAppInfo(appid);

            if (!_checkedAppChannel.State)
            {
                return(OperatedResult <string> .Fail(_checkedAppChannel.Message));
            }

            try
            {
                AppInfo _appInfo     = _checkedAppChannel.Data;
                string  _tokenString = JwtHelper.ParseTokens(token, _appInfo.SharedKey);

                if (string.IsNullOrEmpty(_tokenString))
                {
                    return(OperatedResult <string> .Fail("用户令牌Token为空"));
                }

                dynamic _root              = JObject.Parse(_tokenString);
                string  _userid            = _root.iss;
                double  _jwtcreated        = (double)_root.iat;
                bool    _validTokenExpired =
                    (new TimeSpan((int)(UnixEpochHelper.GetCurrentUnixTimestamp().TotalSeconds - _jwtcreated))
                     .TotalDays) > _appInfo.TokenExpiredDay;
                return(_validTokenExpired == true ? OperatedResult <string> .Fail($"用户ID{_userid}令牌失效") : OperatedResult <string> .Success(_userid));
            }
            catch (FormatException)
            {
                return(OperatedResult <string> .Fail("用户令牌非法"));
            }
            catch (SignatureVerificationException)
            {
                return(OperatedResult <string> .Fail("用户令牌非法"));
            }
        }
Exemplo n.º 14
0
        /// <summary>
        /// 验证WebApi签名
        /// </summary>
        /// <param name="signature">签名</param>
        /// <param name="timestamp">时间戳</param>
        /// <param name="nonce">随机数</param>
        /// <param name="appSecret">签名加密键</param>
        /// <param name="signatureExpiredMinutes">签名过期分钟</param>
        /// <returns>CheckResult</returns>
        internal static CheckResult Validate(string signature, string timestamp, string nonce, string appSecret, int signatureExpiredMinutes)
        {
            string[] _arrayParamter = { appSecret, timestamp, nonce };
            Array.Sort(_arrayParamter);
            string _signatureString = string.Join("", _arrayParamter);

            _signatureString = MD5Encryptor.Encrypt(_signatureString);

            if (signature.CompareIgnoreCase(signature) && CheckHelper.IsNumber(timestamp))
            {
                DateTime _timestampMillis =
                    UnixEpochHelper.DateTimeFromUnixTimestampMillis(timestamp.ToDoubleOrDefault(0f));
                double _minutes = DateTime.UtcNow.Subtract(_timestampMillis).TotalMinutes;

                if (_minutes > signatureExpiredMinutes)
                {
                    return(CheckResult.Fail("签名时间戳失效"));
                }
            }

            return(CheckResult.Success());
        }
Exemplo n.º 15
0
        /// <summary>
        /// 获取用户令牌
        /// </summary>
        /// <param name="userId">用户Id</param>
        /// <param name="signature">加密签名字符串</param>
        /// <param name="timestamp">时间戳</param>
        /// <param name="nonce">随机数</param>
        /// <param name="appSecret">应用接入ID对应Key</param>
        /// <param name="sharedKey">用于加密解密签名以及用户令牌的Key</param>
        /// <param name="timspanExpiredMinutes">时间戳过期时间【分钟】</param>
        /// <returns>
        /// 用户令牌信息
        /// </returns>
        public TokenResult GetAccessToken(string userId, string signature, string timestamp, string nonce, string appSecret, string sharedKey, int timspanExpiredMinutes)
        {
            TokenResult          _result        = new TokenResult();
            Tuple <bool, string> _checkedResult = ValidateSignature(signature, timestamp, nonce, appSecret, timspanExpiredMinutes);

            if (_checkedResult.Item1)
            {
                Dictionary <string, object> _payload = new Dictionary <string, object>()
                {
                    { "userId", userId },
                    { "claim", UnixEpochHelper.GetCurrentUnixTimestamp().TotalSeconds }
                };
                string _token = JsonWebToken.Encode(_payload, sharedKey, JwtHashAlgorithm.HS256);
                _result.Access_token = _token;
                _result.Expires_in   = timspanExpiredMinutes * 24 * 3600;
            }
            else
            {
                throw new FrameworkException(_checkedResult.Item2);
            }

            return(_result);
        }
Exemplo n.º 16
0
        public async Task <TimeSeries <MonitorIdentifier, bool?> > GetMonitorHistoryAsync(
            DateTime startTimeUtc,
            DateTime endTimeUtc,
            TimeSeriesDefinition <MonitorIdentifier> monitorInstanceDefinition)
        {
            if (monitorInstanceDefinition == null)
            {
                throw new ArgumentNullException("monitorInstanceDefinition");
            }

            if (startTimeUtc > endTimeUtc)
            {
                throw new ArgumentException(string.Format("startTimeUtc [{0}] must be <= endTimeUtc [{1}]", startTimeUtc, endTimeUtc));
            }

            startTimeUtc = new DateTime(startTimeUtc.Ticks / TimeSpan.TicksPerMinute * TimeSpan.TicksPerMinute);
            endTimeUtc   = new DateTime(endTimeUtc.Ticks / TimeSpan.TicksPerMinute * TimeSpan.TicksPerMinute);

            string dimensionsFlattened = null;

            if (monitorInstanceDefinition.DimensionCombination != null)
            {
                dimensionsFlattened = string.Join(
                    "/",
                    monitorInstanceDefinition.DimensionCombination.Select(
                        d => string.Join("/", SpecialCharsHelper.EscapeTwice(d.Key), SpecialCharsHelper.EscapeTwice(d.Value))));
            }

            string operation = $"{this.HealthRelativeUrl}/history";

            string url = string.Format(
                "{0}{1}/monitoringAccount/{2}/metricNamespace/{3}/metric/{4}/monitorId/{5}/from/{6}/to/{7}{8}",
                this.connectionInfo.GetEndpoint(monitorInstanceDefinition.Id.MetricIdentifier.MonitoringAccount),
                operation,
                monitorInstanceDefinition.Id.MetricIdentifier.MonitoringAccount,
                SpecialCharsHelper.EscapeTwice(monitorInstanceDefinition.Id.MetricIdentifier.MetricNamespace),
                SpecialCharsHelper.EscapeTwice(monitorInstanceDefinition.Id.MetricIdentifier.MetricName),
                SpecialCharsHelper.EscapeTwice(monitorInstanceDefinition.Id.MonitorId),
                UnixEpochHelper.GetMillis(startTimeUtc),
                UnixEpochHelper.GetMillis(endTimeUtc),
                dimensionsFlattened != null ? "/" + dimensionsFlattened : string.Empty);

            var response = await this.GetResponseAsStringDelegate(
                new Uri(url),
                HttpMethod.Get,
                this.httpClient,
                monitorInstanceDefinition.Id.MetricIdentifier.MonitoringAccount,
                operation,
                null,
                string.Empty,
                null,
                null,
                MetricQueryResponseDeserializer.CurrentVersion,
                NumAttempts).ConfigureAwait(false);

            var values = JsonConvert.DeserializeObject <List <bool?> >(response.Item1);

            return(new TimeSeries <MonitorIdentifier, bool?>(startTimeUtc, endTimeUtc, SerializationConstants.DefaultSeriesResolutionInMinutes, monitorInstanceDefinition, new List <List <bool?> > {
                values
            }, TimeSeriesErrorCode.Success));
        }