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
        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.º 4
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.º 5
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.º 6
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);
        }
Exemplo n.º 7
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.º 8
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.º 9
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);
        }