/// <summary> /// 获取Token /// </summary> /// <returns></returns> private string GetToken(string _CorpId, string _CorpSecret) { if (!string.IsNullOrEmpty(new Infrastructure.Cache.ObjCacheProvider <string>().GetCache("access_token"))) { return(new Infrastructure.Cache.ObjCacheProvider <string>().GetCache("access_token")); } var result = new Response <bool>(); try { string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", _CorpId, _CorpSecret); string response = Infrastructure.Web.WebHelper.HttpWebRequest(url); TokenResultModel resModel = Newtonsoft.Json.JsonConvert.DeserializeObject <TokenResultModel>(response); if (resModel != null) { if (resModel.errcode == "0") { result.Code = 200; new Infrastructure.Cache.ObjCacheProvider <string>().Create("access_token", resModel.access_token, DateTime.Now.AddSeconds(resModel.expires_in)); return(resModel.access_token); } } } catch (Exception ex) { result.Code = 500; return(""); } return(null); }
/// <summary> /// 获取Token /// </summary> /// <returns></returns> public static string GetToken( ) { if (!string.IsNullOrEmpty(new Infrastructure.Cache.ObjCacheProvider <string>().GetCache("access_token"))) { return(new Infrastructure.Cache.ObjCacheProvider <string>().GetCache("access_token")); } string _CorpId = GetCorpId(); string _CorpSecret = CorpSecret(); var result = new Response <bool>(); try { string url = string.Format("https://oapi.dingtalk.com/gettoken?corpid={0}&corpsecret={1}", _CorpId, _CorpSecret); string response = Infrastructure.Web.WebHelper.HttpWebRequest(url); TokenResultModel resModel = Newtonsoft.Json.JsonConvert.DeserializeObject <TokenResultModel>(response); if (resModel != null) { if (resModel.errcode == 0) { result.Code = 200; bool falg = new Infrastructure.Cache.ObjCacheProvider <string>().Create("access_token", resModel.access_token, DateTime.Now.AddSeconds(resModel.expires_in)); return(resModel.access_token); } } } catch (Exception ex) { result.Code = 500; return(""); } return(null); }
private static async Task <HttpClient> CreateHttpClient() { TokenResultModel token = await OAuthHelper.SignIn(); var client = new HttpClient(); client.BaseAddress = _appSettings.PathToESignApi; client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add("Authorization", string.Format("{0} {1}", token.token_type, token.access_token)); return(client); }
private static async Task <HttpClient> CreateHttpClientAuthorized(string accessToken = "") { if (string.IsNullOrEmpty(accessToken)) { TokenResultModel token = await SignIn(); accessToken = token.access_token; } return(await Task.Run(() => { var client = CreateHttpClient(); client.DefaultRequestHeaders.Add("Authorization", string.Format("bearer {0}", accessToken)); return client; })); }
public async Task <ResultModel <TokenResultModel> > Login(LoginModel model) { try { UserDTO user = await _userService.LoginAsync(model); string token = GetToken(user); var result = new TokenResultModel { ExpiresSecond = ApplicationConfig.JWTConfig.ExpiredTime, AccessToken = token }; return(ResultModel <TokenResultModel> .Success(result, "查询成功")); } catch (AspectInvocationException ex) { return(ResultModel <TokenResultModel> .Fail(ex.InnerException?.Message)); } catch (MateralConfigCenterException ex) { return(ResultModel <TokenResultModel> .Fail(ex.Message)); } }
public bool DoAuthorization(HttpActionContext actionContext) { //匿名属性直接通过验证 if (actionContext.ActionDescriptor.GetCustomAttributes <AllowAnonymousAttribute>(true).Count != 0 || actionContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes <AllowAnonymousAttribute>(true) .Count != 0) { string url = actionContext.Request.RequestUri.AbsoluteUri; //只要是匿名访问的,都统一设置一个Token actionContext.Request.Headers.Remove("MojoryToken"); actionContext.Request.Headers.Add("MojoryToken", "AllowAnonymous_" + url); return(true); } TokenResultModel resultModel = _checkTokenServiceBll.CheckToken(actionContext.Request); TokenResult = resultModel; if (resultModel.Code == TokenResultEnum.Allow) //允许访问 { actionContext.Request.Headers.Add("Cid", resultModel.Cid.ToString()); return(true); } if (resultModel.Code == TokenResultEnum.Initial) { var actionName = actionContext.Request.GetActionDescriptor().ActionName; if (actionName == "MojoryLogin") { //重写head中的MojoryToken值 actionContext.Request.Headers.Remove("MojoryToken"); actionContext.Request.Headers.Add("MojoryToken", resultModel.Token); return(true); } } return(false); }
public async Task <ActionResult> Login(LoginViewModel model, string returnUrl) { if (model == null) { try { model = (LoginViewModel)TempData["model"]; } catch (Exception e) { } } if (returnUrl == null) { try { returnUrl = (string)TempData["returnUrl"]; } catch (Exception e) { } } if (!ModelState.IsValid) { return(View(model)); } // Ceci ne comptabilise pas les échecs de connexion pour le verrouillage du compte // Pour que les échecs de mot de passe déclenchent le verrouillage du compte, utilisez shouldLockout: true //var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); TokenModel tm = new TokenModel("password", model.Email, model.Password); TokenResultModel result = await "http://localhost:50631/token" .WithHeader("Accept", "application/json") .PostUrlEncodedAsync(tm).ReceiveJson <TokenResultModel>(); if ((result != null) && (result.access_token != null)) { HttpCookie myCookie = new HttpCookie("UserSettings"); myCookie["token"] = result.access_token; myCookie["email"] = model.Email; //// récupérer le nom du user à partir des coordonnées de client string apiUrl = "http://localhost:50631/api/clients/email?email=" + model.Email; bool IsSuccess = false; try { Client c = Task.Run <Client>(async() => await apiUrl .WithOAuthBearerToken(result.access_token) .WithHeader("Accept", "application/json") .GetAsync().ReceiveJson <Client>()).Result;; myCookie["Name"] = c.Coordonnee.Nom + " " + c.Coordonnee.Prenom; } catch (Exception e1) { apiUrl = "http://localhost:50631/api/prestataires/email?email=" + model.Email; try { Prestataire p = Task.Run <Prestataire>(async() => await apiUrl .WithOAuthBearerToken(result.access_token) .WithHeader("Accept", "application/json") .GetAsync().ReceiveJson <Prestataire>()).Result;; myCookie["Name"] = p.Coordonnee.Nom + " " + p.Coordonnee.Prenom; } catch (Exception e2) { myCookie["Name"] = ""; } } //// myCookie.Expires = DateTime.Now.AddDays(3d); //result.expires; Response.Cookies.Add(myCookie); return(RedirectToLocal(returnUrl)); } else { ModelState.AddModelError("", "Tentative de connexion non valide."); return(View(model)); } //case SignInStatus.RequiresVerification: // return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); }
public TokenResultModel CheckToken(HttpRequestMessage request) { TokenResultModel resultModel = new TokenResultModel(); string token = ""; try { token = request.Headers.GetValues("MojoryToken").First(); } catch { //如果头部没有token 从参数中获取token if (string.IsNullOrEmpty(token)) { string url = request.RequestUri.ToString(); Regex regex = new Regex("token=(?<token>.+?)&"); token = regex.Match(url).Groups["token"].Value; } } /* * 如果传入的token是给定的token数据,则直接返回 */ if (token == AppSettingsHelper.GetAppSettings(AppSettingsEnum.OAToken)) { resultModel.Code = TokenResultEnum.Allow; resultModel.Token = token; IEnumerable <string> cidValuesList; if (request.Headers.TryGetValues("Cid", out cidValuesList)) { resultModel.Cid = Convert.ToInt32(cidValuesList.FirstOrDefault()); } IEnumerable <string> oidValuesList; if (request.Headers.TryGetValues("Oid", out oidValuesList)) { resultModel.Oid = oidValuesList.FirstOrDefault(); } else { throw new Exception("请传入操作员id"); } return(resultModel); } IEnumerable <string> valuesList; string fromSource = "O"; if (request.Headers.TryGetValues("OrderSource", out valuesList)) { fromSource = valuesList.FirstOrDefault(); } TokenModel tokenModel = new TokenModel(); //1.判断是否存在Token if (string.IsNullOrEmpty(token))//1.1 不存在,则生成Token,返回登录首页 { tokenModel.Value = new TokenValueModel { Status = TokenResultEnum.Initial, FromSource = fromSource }; resultModel.Code = TokenResultEnum.Initial; resultModel.Token = _tokenBll.SetToken(tokenModel); return(resultModel); } //2.根据传入的Token获取Redis中对应的信息 tokenModel = _tokenBll.GetToken(token); if (tokenModel == null)//2.1 如果不存在Redis中,则生成初始Token { tokenModel = new TokenModel { Value = new TokenValueModel { Status = TokenResultEnum.Initial, FromSource = fromSource } }; resultModel.Code = TokenResultEnum.Initial; resultModel.Token = _tokenBll.SetToken(tokenModel); return(resultModel); } if (tokenModel.Value.Status == TokenResultEnum.Initial)//2.2.2 Token为初始状态 { resultModel.Code = TokenResultEnum.Initial; resultModel.Token = token; return(resultModel); } if (tokenModel.Value.Status == TokenResultEnum.NoAllow)//2.2.2 Token为禁止访问Api { resultModel.Code = TokenResultEnum.NoAllow; resultModel.Token = token; return(resultModel); } //2.2.3 判断当前传入的设备号是和保存的设备Id一致 //TODO:如果新增个性化后,这个功能就需要根据个性化修改了 string appClientId = string.Empty; if (request.Headers.TryGetValues("AppClientId", out valuesList)) { appClientId = valuesList.FirstOrDefault(); } if (!string.IsNullOrEmpty(appClientId) && tokenModel.Value.Cid.HasValue) { CustomerAppClientIdEntity customerAppClientIdEntity = base.Context.Set <CustomerAppClientIdEntity>() .FirstOrDefault( n => n.Cid == tokenModel.Value.Cid.Value && n.ClientId.ToUpper() == appClientId.ToUpper()); if (customerAppClientIdEntity == null) { _tokenBll.DeleteToken(token); resultModel.Code = TokenResultEnum.MobileChanged; resultModel.Token = token; return(resultModel); } } //2.2.4 允许访问Api resultModel.Code = TokenResultEnum.Allow; resultModel.Token = token; resultModel.Cid = tokenModel.Value.Cid; //2.2.5 更新Token有效时间 _tokenBll.ExpireToken(token, 24); return(resultModel); }
/// <summary> /// 构造方法 /// </summary> /// <param name="model"></param> public UserLoginResultModel(TokenResultModel model) { AccessToken = model.access_token; TokenType = model.token_type; ExpiresSecond = model.expires_in; }
public async Task <IActionResult> Login([FromBody] LoginUserDto model) { if (!ModelState.IsValid) { return(BadRequest(new ResponseModel() { Message = "Model State is not valid", Result = false, Status = 400 })); } if (!IsValidEmail(model.Email)) { return(BadRequest(new ResponseModel() { Message = "Please provide a valid email", Result = false, Status = 404 })); } var user = _userService.GetByEmail(model.Email); if (user == null) { return(BadRequest(new ResponseModel() { Message = "User Not Found", Status = 404, Result = false })); } TokenHelpers tokenHelpers = new TokenHelpers(_configuration); if (!user.IsActive) { string VerificationToken = tokenHelpers.GenerateVerificationToken(model.Email); string url = _configuration.Value.FrontUrl + "/token=" + VerificationToken; string body = $"Please click <a href = {url} >link</a> link to verify YourAccount"; await _emailService.SendMail("Verify Account", body, model.Email); return(BadRequest(new ResponseModel() { Message = "Account is not active please active your account. New Activation link has been sent", Status = 404, Result = false })); } if (!HashingHelper.VerifyPasswordHash(model.Password, user.PasswordHash, user.PasswordSalt)) { return(BadRequest(new ResponseModel() { Message = "Password is wrong. Try Again.", Result = false, Status = 404 })); } TokenResultModel token = tokenHelpers.GenerateToken(user); user.LastLoggedInDate = DateTime.Now; await _userService.UpdateAsync(user); return(Ok(new { user = new { user.Id, user.Name, user.Surname, user.Email, user.Address, role = user.Role.ToString(), user.Phone, user.ImageUrl, user.LastLoggedInDate }, token })); }
internal static async Task <HttpResponseMessage> Logout() { TokenResultModel token = await SignIn(); return(await Logout(token.access_token, token.refresh_token)); }
/// <summary> /// 检查Token /// </summary> /// <returns></returns> public TokenResultModel CheckToken(HttpRequestMessage request) { TokenResultModel resultModel = new TokenResultModel(); string token = request.Headers.GetValues("MojoryToken").First(); //如果头部没有token 从参数中获取token if (string.IsNullOrEmpty(token)) { string url = request.GetRequestContext().Url.ToString(); Regex regex = new Regex("token=(?<token>.+?)&"); token = regex.Match(url).Groups["token"].Value; } /* * 如果传入的token是给定的token数据,则直接返回 */ if (token == AppSettingsHelper.GetAppSettings(AppSettingsEnum.OAToken)) { resultModel.Code = TokenResultEnum.Allow; resultModel.Token = token; IEnumerable <string> cidValuesList; if (request.Headers.TryGetValues("Cid", out cidValuesList)) { resultModel.Cid = Convert.ToInt32(cidValuesList.FirstOrDefault()); } IEnumerable <string> oidValuesList; if (request.Headers.TryGetValues("Oid", out oidValuesList)) { resultModel.Oid = oidValuesList.FirstOrDefault(); } else { throw new Exception("请传入操作员id"); } return(resultModel); } TokenModel tokenModel = new TokenModel(); //1.判断是否存在Token if (string.IsNullOrEmpty(token))//1.1 不存在,则生成Token,返回登录首页 { tokenModel.Value = new TokenValueModel { Status = TokenResultEnum.Initial }; resultModel.Code = TokenResultEnum.Initial; resultModel.Token = SetToken(tokenModel); return(resultModel); } //2.根据传入的Token获取Redis中对应的信息 tokenModel = GetToken(token); if (tokenModel == null)//2.1 如果不存在Redis中,则生成初始Token { tokenModel = new TokenModel { Value = new TokenValueModel { Status = TokenResultEnum.Initial } }; resultModel.Code = TokenResultEnum.Initial; resultModel.Token = SetToken(tokenModel); return(resultModel); } if (tokenModel.Value.Status == TokenResultEnum.Initial)//2.2.2 Token为初始状态 { resultModel.Code = TokenResultEnum.Initial; resultModel.Token = token; return(resultModel); } if (tokenModel.Value.Status == TokenResultEnum.NoAllow)//2.2.2 Token为禁止访问Api { resultModel.Code = TokenResultEnum.NoAllow; resultModel.Token = token; return(resultModel); } //2.2.3 允许访问Api resultModel.Code = TokenResultEnum.Allow; resultModel.Token = token; resultModel.Cid = tokenModel.Value.Cid; //2.2.4 更新Token有效时间 ExpireToken(token, 24); return(resultModel); }