コード例 #1
0
ファイル: SSOServerService.svc.cs プロジェクト: cairabbit/daf
 public IServerResponse<Session> SignOn(SignOnInfo signOnInfo)
 {
     return serverProvider.SignOn(signOnInfo);
 }
コード例 #2
0
ファイル: AccountController.cs プロジェクト: cairabbit/daf
 public virtual ActionResult SignOn(SignOnInfo model, string redirect = "/")
 {
     if (ModelState.IsValid)
     {
         var response = AuthHelper.SignOn(model.AccountOrEmailOrMobile, model.Password, Request.Form["RememberMe"].ConvertTo<bool>(false), Request.Form["Captcha"]);
         if (response.Status == ResponseStatus.Success)
         {
             return Redirect(redirect);
         }
         else
         {
             ViewBag.Message = response.Message;
         }
     }
     else
     {
         ModelState.AddModelError("", DAF.SSO.Resources.Locale(o => o.SignOnFailed));
     }
     ViewBag.HasTriedLogin = true;
     return View(model);
 }
コード例 #3
0
ファイル: SSOServerProvider.cs プロジェクト: cairabbit/daf
        public IServerResponse<Session> SignOn(SignOnInfo signOnInfo)
        {
            var client = GetClient(signOnInfo.ClientId);
            var encryptor = GetClientEncryptor(client);
            var hpwd = pwdEncryptor.Encrypt(signOnInfo.Password);

            var obj = repoUser.Query(o => (o.Account == signOnInfo.AccountOrEmailOrMobile || o.Email == signOnInfo.AccountOrEmailOrMobile || o.Mobile == signOnInfo.AccountOrEmailOrMobile)
                && o.Password == hpwd).FirstOrDefault();

            ServerResponse<Session> response = new ServerResponse<Session>();

            if (obj == null)
            {
                response.Status = ResponseStatus.Failed;
                response.Message = DAF.SSO.Resources.Locale(o => o.AccountNotFound);
            }
            else
            {
                switch (obj.Status)
                {
                    case DataStatus.Deleted:
                        response.Status = ResponseStatus.Failed;
                        response.Message = DAF.SSO.Resources.Locale(o => o.AccountNotFound);
                        break;
                    case DataStatus.Locked:
                        response.Status = ResponseStatus.Failed;
                        response.Message = DAF.SSO.Resources.Locale(o => o.AccountLocked);
                        break;
                    case DataStatus.ReadOnly:
                        response.Status = ResponseStatus.Failed;
                        response.Message = DAF.SSO.Resources.Locale(o => o.AccountIsReadOnly);
                        break;
                    case DataStatus.Normal:
                    default:
                        response.Status = ResponseStatus.Success;
                        break;
                }
            }
            if (response.Status == ResponseStatus.Success)
            {
                try
                {
                    trans.BeginTransaction();
                    var serverSession = repoServerSession.Query(o => o.SessionId == signOnInfo.SessionId && o.CientId == client.ClientId && o.DeviceId == signOnInfo.DeviceId).FirstOrDefault();
                    if (serverSession == null)
                    {
                        serverSession = new ServerSession()
                      {
                          CientId = client.ClientId,
                          SessionId = signOnInfo.SessionId,
                          FromCientId = null,
                          DeviceId = signOnInfo.DeviceId,
                          DeviceInfo = signOnInfo.DeviceInfo,
                          UserId = obj.UserId,
                          AccessToken = randomGenerator.Generate(config.TokenAllowedChars, config.TokenLength),
                          LastAccessTime = DateTime.Now,
                          AccessTokenExpiryTime = DateTime.Now.AddMinutes(config.SessionExpiredTimeOutMunites)
                      };
                        repoServerSession.Insert(serverSession);
                    }
                    else
                    {
                        if (serverSession.AccessTokenExpiryTime < DateTime.Now)
                        {
                            serverSession.AccessToken = randomGenerator.Generate(config.TokenAllowedChars, config.TokenLength);
                        }
                        serverSession.LastAccessTime = DateTime.Now;
                        serverSession.AccessTokenExpiryTime = DateTime.Now.AddMinutes(config.SessionExpiredTimeOutMunites);

                        repoServerSession.Update(serverSession);
                    }
                    trans.Commit();

                    response.Data = GetClientSession(client, obj, serverSession);
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    response.Status = ResponseStatus.Failed;
                    response.Message = ex.Message;
                }
            }
            return response;
        }
コード例 #4
0
ファイル: AuthHelper.cs プロジェクト: cairabbit/daf
        public static ServerResponse SignOn(string accountOrEmailOrMobile, string password, bool rememberMe = false, string captcha = null)
        {
            ServerResponse response = new ServerResponse();
            var signOnInfo = new SignOnInfo()
            {
                ClientId = CurrentClient.ClientId,
                SessionId = HttpContext.Current.Session.SessionID,
                DeviceId = HttpContext.Current.Request.UserHostAddress,
                DeviceInfo = HttpContext.Current.Request.UserAgent,
                AccountOrEmailOrMobile = accountOrEmailOrMobile,
                Password = password,
            };

            bool captchaPassed = true;

            try
            {
                if (!string.IsNullOrEmpty(captcha))
                {
                    var captchaGenerator = IocInstance.Container.Resolve<ICaptchaGenerator>();
                    if (captchaGenerator.Verify(signOnInfo.SessionId, captcha) == false)
                    {
                        captchaPassed = false;
                        response.Status = ResponseStatus.Failed;
                        response.Message = DAF.SSO.Resources.Locale(o => o.CaptchaNotCorrect);
                    }
                }

                if (captchaPassed)
                {
                    ISSOClientProvider scp = IocInstance.Container.Resolve<ISSOClientProvider>();

                    var r = scp.SignOn(signOnInfo);
                    if (r.Status == ResponseStatus.Success)
                    {
                        response.Status = ResponseStatus.Success;
                        if (rememberMe)
                        {
                            SetSessionCookie();
                        }
                    }
                    else
                    {
                        response.Status = ResponseStatus.Failed;
                        response.Message = r.Message;
                    }
                }
            }
            catch (Exception ex)
            {
                response.Status = ResponseStatus.Exception;
                response.Message = ex.Message;
            }

            return response;
        }
コード例 #5
0
ファイル: SSOClientProvider.cs プロジェクト: cairabbit/daf
        public IServerResponse SignOn(SignOnInfo signOnInfo)
        {
            Assert.IsNotNull(signOnInfo);
            Assert.IsStringNotNullOrEmpty(signOnInfo.AccountOrEmailOrMobile);
            Assert.IsStringNotNullOrEmpty(signOnInfo.Password);

            IServerResponse<Session> response = serverProvider.SignOn(signOnInfo);
            if (response.Status == ResponseStatus.Success && response.Data != null)
            {
                SaveSession(response.Data);
            }

            return response;
        }
コード例 #6
0
ファイル: SSOClientProvider.cs プロジェクト: cairabbit/daf
        public IServerResponse SignOn(SignOnInfo signOnInfo)
        {
            Assert.IsNotNull(signOnInfo);
            Assert.IsStringNotNullOrEmpty(signOnInfo.AccountOrEmailOrMobile);
            Assert.IsStringNotNullOrEmpty(signOnInfo.Password);

            IServerResponse<Session> response = null;

            var chanel = CreateChannel();
            chanel.Call(p =>
            {
                response = p.SignOn(signOnInfo);
                if (response.Status == ResponseStatus.Success && response.Data != null)
                {
                    SaveSession(response.Data);
                }
            });

            return response;
        }