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; })); }
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()); }
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); }