示例#1
0
        public override Task <TokenValidateResponseDTO> Validate(TokenValidateRequestDTO request, ServerCallContext context)
        {
            return(Task.Run(() =>
            {
                TokenValidateResponseDTO response = new TokenValidateResponseDTO();
                StringBuilder logtext = new StringBuilder();
                logtext.AppendLine($"验证token={request.Token}");
                if (string.IsNullOrEmpty(request.Token))
                {
                    logtext.AppendLine("token为空");
                    Log.Info(logtext.ToString());
                    response.RetCode = "0401";
                    response.RetMsg = "无效的token";
                    return response;
                }

                var ut = OAuth.Token.UserToken.FromCipherToken(request.Token);
                if (ut.Expire_Time < DateTime.Now)
                {
                    logtext.AppendLine("Token已过期");
                    Log.Info(logtext.ToString());
                    response.RetCode = "0401";
                    response.RetMsg = "token已过期";
                    return response;
                }
                //Tauth_Token daToken = new Tauth_Token();
                var daTokenCollection = DaoFactory.Tauth_TokenCollection();
                if (!daTokenCollection.ListByUserId_AppId(ut.UserId, ut.AppId))
                {
                    logtext.AppendLine("数据库未找到该Token,无效的Token[db fail]");
                    Log.Info(logtext.ToString());
                    response.RetCode = "0401";
                    response.RetMsg = "无效的token";
                    return response;
                }
                ITauth_Token daToken = null;
                foreach (ITauth_Token item in daTokenCollection)
                {
                    if (item.Token_Code.Equals(request.Token))
                    {
                        daToken = item;
                    }
                }
                if (daToken == null)
                {
                    logtext.AppendLine("数据库未找到该Token,无效的Token[not found]");
                    Log.Info(logtext.ToString());
                    response.RetCode = "0401";
                    response.RetMsg = "无效的token";
                    return response;
                }
                Log.Info("Token有效");
                Log.Info(logtext.ToString());
                response.RetCode = "0000";
                response.RetMsg = "ok";
                return response;
            }));
        }
示例#2
0
        public ResponseResult Validate(string token)
        {
            StringBuilder logtext = new StringBuilder();

            logtext.AppendLine($"验证token={token}");
            if (string.IsNullOrEmpty(token))
            {
                logtext.AppendLine("token为空");
                Log.Info(logtext.ToString());
                return(Fail("无效的token", "0401"));
            }

            var ut = OAuth.Token.UserToken.FromCipherToken(token);

            if (ut.Expire_Time < DateTime.Now)
            {
                logtext.AppendLine("Token已过期");
                Log.Info(logtext.ToString());
                return(Fail("token已过期", "0401"));
            }
            var daTokenCollection = DaoFactory.Tauth_TokenCollection();

            if (!daTokenCollection.ListByUserId_AppId(ut.UserId, ut.AppId))
            {
                logtext.AppendLine("数据库未找到该Token,无效的Token[db fail]");
                Log.Info(logtext.ToString());
                return(Fail("无效的token", "0401"));
            }
            ITauth_Token daToken = null;

            foreach (ITauth_Token item in daTokenCollection)
            {
                if (item.Token_Code.Equals(token))
                {
                    daToken = item;
                }
            }
            if (daToken == null)
            {
                logtext.AppendLine("数据库未找到该Token,无效的Token[not found]");
                Log.Info(logtext.ToString());
                return(Fail("无效的token", "0401"));
            }
            Log.Info("Token有效");
            Log.Info(logtext.ToString());
            return(Success());
        }
示例#3
0
        public bool Refresh()
        {
            var app = OAuthAppCache.Get(this._appid);

            if (app == null)
            {
                Alert(ResultType.非法操作, "未知的应用ID");
                return(false);
            }
            var DecryptRes = UserTokenProvider.DecryptAccessToken(this._refresh_token);

            if (!DecryptRes.Success)
            {
                Alert(ResultType.非法操作, DecryptRes.Message);
                return(false);
            }
            UserToken token = DecryptRes.Content;

            if (token.Expire_Time < DateTime.Now)
            {
                Alert(ResultType.需要登陆, "令牌已过期,请重新发起用户授权");
                return(false);
            }
            //Tauth_Token daToken = new Tauth_Token();
            var daTokenCollection = DaoFactory.Tauth_TokenCollection();

            if (!daTokenCollection.ListByUserId_AppId(token.UserId, app.Id))
            {
                Alert(ResultType.无权限, "未找到授权记录,无效的刷新令牌");
                return(false);
            }
            ITauth_Token daToken = null;

            foreach (ITauth_Token item in daTokenCollection)
            {
                if (item.Refresh_Token.Equals(this._refresh_token))
                {
                    daToken = item;
                }
            }
            if (daToken == null)
            {
                Alert(ResultType.非法操作, "无效的刷新令牌");
                return(false);
            }
            if (daToken.Refresh_Timeout < DateTime.Now)
            {
                Alert(ResultType.无权限, "令牌已过期,请重新发起用户授权");
                return(false);
            }
            var   fac  = UserModuleFactory.GetUserModuleInstance();
            IUser user = fac?.GetUserByID(daToken.User_Id);

            if (user == null)
            {
                Alert("用户不存在");
                return(false);
            }
            string userCode = user.GetUserVoucher(UserVoucherType.自定义号码);
            string newToken = UserTokenProvider.EncryptAccessToken(token.UserId, userCode, app.Id);

            daToken.Token_Code  = newToken;
            daToken.Expire_Time = DateTime.Now.AddSeconds(this.OAuthUser.Expire_In);
            if (!daToken.Update())
            {
                Alert(ResultType.系统异常, "Token刷新失败,请重试");
                return(false);
            }
            this.OAuthUser.Open_Id           = UserTokenProvider.EncryptOpenId(app.Id, token.UserId, userCode, app.UidEncryptKey);
            this.OAuthUser.Token             = newToken;
            this.OAuthUser.Refresh_Token     = this._refresh_token;
            this.OAuthUser.Refresh_Expire_In = (int)(daToken.Refresh_Timeout - DateTime.Now).TotalDays;
            return(true);
        }