示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        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);
        }
示例#4
0
        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;
            }));
        }
示例#5
0
        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);
        }
示例#7
0
        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 });
        }
示例#8
0
        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);
        }
示例#9
0
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="model"></param>
 public UserLoginResultModel(TokenResultModel model)
 {
     AccessToken   = model.access_token;
     TokenType     = model.token_type;
     ExpiresSecond = model.expires_in;
 }
示例#10
0
        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
            }));
        }
示例#11
0
        internal static async Task <HttpResponseMessage> Logout()
        {
            TokenResultModel token = await SignIn();

            return(await Logout(token.access_token, token.refresh_token));
        }
示例#12
0
        /// <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);
        }