//[EnableCors(origins: "*", headers: "*", methods: "*")] public HttpResponseMessage UpdateCookie() { SSOReturnResult ret = new SSOReturnResult(); SSOUserStatus us = new SSOUserStatus(); string req = SSOHTTPRequestService.getDataInRequest(Request); SSOCookieInfor ci = SSOHTTPRequestService.getDataFromString <SSOCookieInfor>(req); SSOUserLoginInfors oldValue = null; if (ci != null && ci.Token != null && UserManagerService.CheckRequestAuthentication(ci.Token, out oldValue)) { oldValue.UserCookie.Expires = ci.Expires; UserManagerService.UsersLoggedIn.AddOrUpdate(ci.Token, oldValue, (key, existingVal) => { existingVal.UserCookie.Expires = oldValue.UserCookie.Expires; return(existingVal); }); ret.ReturnCode = HttpStatusCode.OK; ret.Message = "Cập nhật thành công"; } else { ret.ReturnCode = HttpStatusCode.BadRequest; ret.Message = "Dữ liệu cập nhật không hợp lệ"; } return(SSOHTTPRequestService.CreateResponseMessage(ret, HttpStatusCode.OK)); }
//Kiểm tra request đã được xác thực chưa //false: request is not authenticated //true: request is authenticated //Xóa thông tin user đăng nhập nếu cần public static bool CheckRequestAuthentication(string Token, out SSOUserLoginInfors Us) { Us = null; SSOLoginMessage Tm; if (Token != null && !Token.Equals("")) { if (UsersLoggedIn.TryGetValue(Token, out Us)) { //xử lý khi cookie quá hạn if (SSOHTTPRequestService.CheckExpired(Us.UserCookie)) { if (UsersLoggedIn.TryRemove(Token, out Us)) { Tm = new SSOLoginMessage(); Tm.Token = Token; Tm.User = Us.User.TENDANGNHAP; Tm.Message = "Phiên làm việc đã kết thúc, vui lòng đăng nhập lại"; Tm.Expires = DateTime.Now.AddMinutes(Config.AUTH_COOKIE_TIMEOUT_IN_MINUTES); TokenMessage.AddOrUpdate(Token, Tm, (key, existingVal) => { existingVal = Tm; return(existingVal); }); } UserToken.TryRemove(Us.User.TENDANGNHAP, out Token); return(false); } //xử lý khi token quá hạn if (SSOHTTPRequestService.CheckExpired(Us)) { if (UsersLoggedIn.TryRemove(Token, out Us)) { Tm = new SSOLoginMessage(); Tm.Token = Token; Tm.User = Us.User.TENDANGNHAP; Tm.Message = "Token hết hạn, vui lòng đăng nhập lại"; Tm.Expires = DateTime.Now.AddMinutes(Config.AUTH_COOKIE_TIMEOUT_IN_MINUTES); TokenMessage.AddOrUpdate(Token, Tm, (key, existingVal) => { existingVal = Tm; return(existingVal); }); } UserToken.TryRemove(Us.User.TENDANGNHAP, out Token); return(false); } return(true); } } return(false); }
//[EnableCors(origins: "*", headers: "*", methods: "*")] public HttpResponseMessage getUserStatus() { SSOUserStatus us = new SSOUserStatus(); SSOUserLoginInfors Us = null; string req = SSOHTTPRequestService.getDataInRequest(Request); string dt = SSOHTTPRequestService.getDataFromString <string>(req); us.UserLoggedIn = UserManagerService.CheckRequestAuthentication(dt, out Us); return(SSOHTTPRequestService.CreateResponseMessage(us, HttpStatusCode.OK)); }
private static void CheckAndReleaseData(SSOUserLoginInfors Us) { Us = null; SSOLoginMessage Tm; string Token = ""; //xử lý khi cookie quá hạn if (SSOHTTPRequestService.CheckExpired(Us.UserCookie)) { if (UsersLoggedIn.TryRemove(Us.Token, out Us)) { Tm = new SSOLoginMessage(); Tm.Token = Us.Token; Tm.User = Us.User.TENDANGNHAP; Tm.Message = "Phiên làm việc đã kết thúc, vui lòng đăng nhập lại"; Tm.Expires = DateTime.Now.AddMinutes(Config.AUTH_COOKIE_TIMEOUT_IN_MINUTES); TokenMessage.AddOrUpdate(Us.Token, Tm, (key, existingVal) => { existingVal = Tm; return(existingVal); }); } UserToken.TryRemove(Us.User.TENDANGNHAP, out Token); } //xử lý khi token quá hạn if (SSOHTTPRequestService.CheckExpired(Us)) { if (UsersLoggedIn.TryRemove(Us.Token, out Us)) { Tm = new SSOLoginMessage(); Tm.Token = Us.Token; Tm.User = Us.User.TENDANGNHAP; Tm.Message = "Token hết hạn, vui lòng đăng nhập lại"; Tm.Expires = DateTime.Now.AddMinutes(Config.AUTH_COOKIE_TIMEOUT_IN_MINUTES); TokenMessage.AddOrUpdate(Us.Token, Tm, (key, existingVal) => { existingVal = Tm; return(existingVal); }); } UserToken.TryRemove(Us.User.TENDANGNHAP, out Token); } }
private static void CheckAccountLoginAndAdd(SSOUserLoginInfors Us) { string Token; SSOLoginMessage Tm; SSOUserLoginInfors oldValue; //nếu đây là login từ máy khác if (UserToken.ContainsKey(Us.User.TENDANGNHAP)) { //remove token cũ if (UserToken.TryRemove(Us.User.TENDANGNHAP, out Token)) { if (UsersLoggedIn.TryRemove(Token, out oldValue)) { Tm = new SSOLoginMessage(); Tm.Token = Token; Tm.User = Us.User.TENDANGNHAP; Tm.Message = "Tài khoản vừa được đăng nhập ở một vị trí khác"; Tm.Expires = DateTime.Now.AddMinutes(Config.AUTH_COOKIE_TIMEOUT_IN_MINUTES); TokenMessage.AddOrUpdate(Token, Tm, (key, existingVal) => { existingVal = Tm; return(existingVal); }); } } } //cập nhật lại thông tin token mới theo user UserToken.AddOrUpdate(Us.User.TENDANGNHAP, Us.Token, (key, existingVal) => { existingVal = Us.Token; return(existingVal); }); //cập nhật lại toàn bộ thông tin user đang đăng nhập UsersLoggedIn.AddOrUpdate(Us.Token, Us, (key, existingVal) => { existingVal = Us; return(existingVal); }); }
//[EnableCors(origins: "*", headers: "*", methods: "*")] public HttpResponseMessage LogoutUser(string Token) { SSOUserLoginInfors Us = null; if (UserManagerService.CheckRequestAuthentication(Token, out Us)) { var context = new HttpContextWrapper(HttpContext.Current); HttpRequestBase request = context.Request; SSOHttpRequestParams par = SSOHTTPRequestService.GetRequestParams(request); //var app = HttpContext.Current.ApplicationInstance as HttpApplication; UserManagerService.LogoutUser(par, SSOConstants.Cookie.AUTH_COOKIE, null); } SSOReturnResult ret = new SSOReturnResult(); ret.ReturnCode = HttpStatusCode.OK; ret.Message = "Logout thành công"; return(SSOHTTPRequestService.CreateResponseMessage(ret, HttpStatusCode.OK)); }
// GET: Authenticate public ActionResult Login() { SSOLoginMessage tm = null; SSOUserLoginInfors ui = null; string tk = null; var par = SSOHTTPRequestService.GetRequestParams(Request); ViewBag.ReturnUrl = par == null ? "" : (par.ReturnUrl == null ? "" : par.ReturnUrl); if (par != null && par.Token != null && !par.Token.Equals("")) { if (UserManagerService.TokenMessage.TryRemove(par.Token, out tm)) { ViewBag.TB = tm.Message; } if (UserManagerService.UsersLoggedIn.TryRemove(par.Token, out ui)) { UserManagerService.UserToken.TryRemove(ui.User.TENDANGNHAP, out tk); } } return(View()); }
//[EnableCors(origins: "*", headers: "*", methods: "*")] public HttpResponseMessage getUserInfors() { SSOUserLoginInfors Us = null, ret = null; string req = SSOHTTPRequestService.getDataInRequest(Request); SSOHtTokenRequestData Data = SSOHTTPRequestService.getDataFromString <SSOHtTokenRequestData>(req); bool check = false; if (UserManagerService.CheckRequestAuthentication(Data.Token, out Us)) { if (Data.isTokenFromCookie || Us.FirstTimeToken) { ret = AutoMapper.Mapper.Map <SSOUserLoginInfors, SSOUserLoginInfors>(Us); ret.SuccessGetData = true; ret.ThongBao = "Lấy dữ liệu thành công"; ret.UserCookie = null; ret.FirstTimeToken = false; Us.FirstTimeToken = false; UserManagerService.UsersLoggedIn.AddOrUpdate(Us.Token, Us, (key, existingVal) => { existingVal.FirstTimeToken = Us.FirstTimeToken; return(existingVal); }); check = true; } } if (!check) { ret = new SSOUserLoginInfors(); ret.SuccessGetData = false; ret.ThongBao = "Yêu cầu không hợp lệ"; } return(SSOHTTPRequestService.CreateResponseMessage(ret, HttpStatusCode.OK)); }
/// <summary> /// Authenticates user from the system /// </summary> /// <param name="UserName"></param> /// <param name="Password"></param> /// <returns>UserLoginInfors if authenticate success, if not success, return null</returns> public static SSOUserLoginInfors AuthenticateUser(string UserName, string Password, ref string thongBao) { SSOUserLoginInfors Us = null; HT_NGUOIDUNG user = null; thongBao = ""; if (UserName != null && UserName != "") { using (MPLISEntities db = new MPLISEntities()) { user = db.HT_NGUOIDUNG.Where(c => c.TENDANGNHAP.ToUpper().Equals(UserName.ToUpper()) && c.MATKHAU.Equals(Password)).FirstOrDefault(); if (user == null) { thongBao = "Người dùng hoặc mật khẩu không đúng"; } else { if (user.CHOPHEPSUDUNG == "1") { if (user.THOIDIEMMATKHAUCOHIEULUC != null && user.THOIDIEMMATKHAUHETHIEULUC != null) { // Xac dinh khoang thoi gian ma Nguoi dung duoc phep truy cap he thong //var nguoiDung = db.HT_NGUOIDUNG.Where(p => p.NGUOIDUNGID == user.NGUOIDUNGID).FirstOrDefault(); if (user.THOIDIEMMATKHAUCOHIEULUC != null && user.THOIDIEMMATKHAUHETHIEULUC != null) { if (DateTime.Compare(DateTime.Parse(DateTime.Now.ToString()), DateTime.Parse(user.THOIDIEMMATKHAUCOHIEULUC.ToString())) >= 0) { if (DateTime.Compare(DateTime.Parse(DateTime.Now.ToString()), DateTime.Parse(user.THOIDIEMMATKHAUHETHIEULUC.ToString())) > 0) { thongBao = "Tài khoản đã hêt hạn tham gia hệ thống"; user = null; } } else { thongBao = "Tài khoản chưa đến thời điểm tham gia hệ thống"; user = null; } } else { thongBao = "Tài khoản chưa xác định được thời gian tham gia hệ thống"; user = null; } } } else { thongBao = "Tài khoản đã bị khóa"; user = null; } } } } if (user != null) //xác thực thành công, thêm thông tin xác thực người dùng vào danh sách người dùng đã xác thực để quản lý { Us = GetUserInfor(user); HttpCookie aCookie = new HttpCookie(SSOConstants.Cookie.AUTH_COOKIE);//("VILISUserLoginInfo"); SSOCookieValues cv = new SSOCookieValues(); cv.UserName = user.TENDANGNHAP; cv.Token = Us.Token; cv.LastVisit = DateTime.Now; string retString = JsonConvert.SerializeObject(cv); string encrString = Utility.Encrypt(retString, true, Config.SECURITY_KEY); aCookie.Value = encrString; aCookie.Expires = DateTime.Now.AddMinutes(Config.AUTH_COOKIE_TIMEOUT_IN_MINUTES); Us.UserCookie = aCookie; CheckAccountLoginAndAdd(Us); } return(Us); }
/// <summary> /// Get user informations from database /// </summary> /// <param name="UniqueId"></param> /// <returns>UserLoginInfors for user input</returns> private static SSOUserLoginInfors GetUserInfor(HT_NGUOIDUNG user) { if (user == null) { return(null); } SSOUserLoginInfors Us = new SSOUserLoginInfors(); SSOHcTinh sTinh; SSOHcHuyen sHuyen; SSOHcXa sXa; SSOHtQuyen sQuyen; Hashtable cXa = new Hashtable(), cHuyen = new Hashtable(); string tenQuyen = ""; using (MPLISEntities db = new MPLISEntities()) { //Lấy thông tin tổ chức của người dùng var TcInf = (from tcnd in db.HT_TOCHUC_NGUOIDUNG.Where(i => i.NGUOIDUNGID.Equals(user.NGUOIDUNGID)) select new { tcnd, tc = db.HT_TOCHUC.Where(i => i.TOCHUCID.Equals(tcnd.TOCHUCID)).FirstOrDefault() }).FirstOrDefault(); if (TcInf != null && TcInf.tc != null) { Us.ToChucNguoiDung = Mapper.Map <HT_TOCHUC_NGUOIDUNG, SSOHtToChucNguoiDung>(TcInf.tcnd); Us.ToChuc = Mapper.Map <HT_TOCHUC, SSOHtToChuc>(TcInf.tc); #region "Lấy các thông tin liên quan tổ chức" #region "KVHC - tổ chức" switch (Us.ToChuc.CAPTOCHUC) { case 1: //cấp trung ương - do nothing break; case 2: //cấp tỉnh - lấy toàn bộ cây hành chính cấp tỉnh //lấy tỉnh var hcT = (from t in db.HC_TINH.Where(i => i.TINHID.Equals(Us.ToChuc.DONVIHANHCHINHID)) select t).FirstOrDefault(); if (hcT != null) { sTinh = Mapper.Map <HC_TINH, SSOHcTinh>(hcT); Us.ToChucKVHC.Add(sTinh.TINHID, sTinh); //lấy huyện theo tỉnh var hcH = (from h in db.HC_HUYEN where h.MAKVHC.StartsWith(sTinh.MAKVHC) select h).ToList(); if (hcH != null) { foreach (var it in hcH) { sHuyen = Mapper.Map <HC_HUYEN, SSOHcHuyen>(it); Us.ToChucKVHC.Add(sHuyen.HUYENID, sHuyen); } //lấy xã theo tỉnh var hcXa = (from x in db.HC_DMKVHC where x.MAKVHC.StartsWith(sTinh.MAKVHC) select x).ToList(); if (hcH != null) { foreach (var it in hcXa) { sXa = Mapper.Map <HC_DMKVHC, SSOHcXa>(it); if (!Us.ToChucKVHC.Contains(sXa.KVHCID)) { Us.ToChucKVHC.Add(sXa.KVHCID, sXa); } } } } } break; case 3: //cấp huyện //lấy huyện var hcHuyen = (from t in db.HC_HUYEN.Where(i => i.HUYENID.Equals(Us.ToChuc.DONVIHANHCHINHID)) select t).FirstOrDefault(); if (hcHuyen != null) { sHuyen = Mapper.Map <HC_HUYEN, SSOHcHuyen>(hcHuyen); Us.ToChucKVHC.Add(sHuyen.HUYENID, sHuyen); //lấy tỉnh của huyện var hcT1 = (from t in db.HC_TINH.Where(i => i.TINHID.Equals(sHuyen.TINHID)) select t).FirstOrDefault(); if (hcT1 != null) { sTinh = Mapper.Map <HC_TINH, SSOHcTinh>(hcT1); if (!Us.ToChucKVHC.Contains(sTinh.TINHID)) { Us.ToChucKVHC.Add(sTinh.TINHID, sTinh); } } //lấy xã theo huyện var hcXa = (from xa in db.HC_DMKVHC.Where(i => i.HUYENID.Equals(hcHuyen.HUYENID)) select xa).ToList(); if (hcXa != null) { foreach (var it in hcXa) { sXa = Mapper.Map <HC_DMKVHC, SSOHcXa>(it); if (!Us.ToChucKVHC.Contains(sXa.KVHCID)) { Us.ToChucKVHC.Add(sXa.KVHCID, sXa); } } } } break; default: //cấp xã var hcXa1 = (from t in db.HC_DMKVHC.Where(i => i.KVHCID.Equals(Us.ToChuc.DONVIHANHCHINHID)) select t).FirstOrDefault(); if (hcXa1 != null) { sXa = Mapper.Map <HC_DMKVHC, SSOHcXa>(hcXa1); if (!Us.ToChucKVHC.Contains(sXa.KVHCID)) { Us.ToChucKVHC.Add(sXa.KVHCID, sXa); } //lấy huyện var hcHuyen1 = (from t in db.HC_HUYEN.Where(i => i.HUYENID.Equals(sXa.HUYENID)) select t).FirstOrDefault(); if (hcHuyen1 != null) { sHuyen = Mapper.Map <HC_HUYEN, SSOHcHuyen>(hcHuyen1); if (!Us.ToChucKVHC.Contains(sHuyen.HUYENID)) { Us.ToChucKVHC.Add(sHuyen.HUYENID, sHuyen); } //lấy tỉnh var hcT1 = (from t in db.HC_TINH.Where(i => i.TINHID.Equals(sHuyen.TINHID)) select t).FirstOrDefault(); if (hcT1 != null) { sTinh = Mapper.Map <HC_TINH, SSOHcTinh>(hcT1); if (!Us.ToChucKVHC.Contains(sTinh.TINHID)) { Us.ToChucKVHC.Add(sTinh.TINHID, sTinh); } } } } break; } #endregion #region "Quyền/Menu - tổ chức" //lấy danh sách nhóm chức năng của tổ chức var ncn = (from tcncn in db.HT_TOCHUC_NHOMCHUCNANG.Where(i => i.TOCHUCID.Equals(Us.ToChuc.TOCHUCID)) select new { tcncn, ncn = db.HT_NHOMCHUCNANG.Where(i => i.NHOMCHUCNANGID.Equals(tcncn.NHOMCHUCNANGID)).FirstOrDefault() }).ToList(); if (ncn != null && ncn.Count > 0) { List <string> NCNIds = new List <string>(); foreach (var it in ncn) { if (it.ncn != null) { NCNIds.Add(it.ncn.NHOMCHUCNANGID); } } if (NCNIds.Count > 0) { #region "Quyền - tổ chức" //lấy danh sách chức năng theo danh sách nhóm chức năng của tổ chức var dscn = (from cnncn in db.HT_CHUCNANG_NHOMCHUCNANG.Where(i => NCNIds.Contains(i.NHOMCHUCNANGID)) select new { cnncn, cn = db.HT_CHUCNANG.Where(i => i.CHUCNANGID.Equals(cnncn.CHUCNANGID)).FirstOrDefault(), }).ToList(); if (dscn != null && dscn.Count > 0) { List <string> CNIds = new List <string>(); foreach (var it in dscn) { if (it.cn != null) { CNIds.Add(it.cn.CHUCNANGID); } } if (CNIds.Count > 0) { //lấy danh sách quyền theo danh sách chức năng của tổ chức var dsq = (from q in db.HT_QUYEN.Where(i => CNIds.Contains(i.CHUCNANGID)) select q).ToList(); if (dsq != null && dsq.Count > 0) { foreach (var it in dsq) { sQuyen = Mapper.Map <HT_QUYEN, SSOHtQuyen>(it); if (!Us.ToChucQuyen.Contains(it.QUYENID)) { Us.ToChucQuyen.Add(it.QUYENID, sQuyen); } } } } } #endregion #region "Menu - Tổ chức" //Lấy danh sách ứng dụng được chọn var dsUD = (from ud in db.HT_UNGDUNG select ud).ToList(); SSOHtUngDung ud1; foreach (var ud in dsUD) { ud1 = Mapper.Map <HT_UNGDUNG, SSOHtUngDung>(ud); Us.AllUngDung.Add(ud1.UNGDUNGID, ud1); } var dsmn1 = (from ncnmn in db.HT_NHOMCHUCNANG_MENU.Where(i => NCNIds.Contains(i.NHOMCHUCNANGID)) select new { ncnmn, mn = db.HT_MENU.Where(i => i.MENUID.Equals(ncnmn.MENUID)).Where(i => i.CHOPHEPSUDUNG.Equals("1")).FirstOrDefault(), }).OrderBy(i => i.mn.UNGDUNGID).OrderBy(i => i.mn.MAMENU); //lấy danh sách chức năng theo danh sách nhóm chức năng của tổ chức var dsmn = (from ncnmn in db.HT_NHOMCHUCNANG_MENU.Where(i => NCNIds.Contains(i.NHOMCHUCNANGID)) select new { ncnmn, mn = db.HT_MENU.Where(i => i.MENUID.Equals(ncnmn.MENUID)).Where(i => i.CHOPHEPSUDUNG.Equals("1")).FirstOrDefault(), }).OrderBy(i => i.mn.UNGDUNGID).OrderBy(i => i.mn.MAMENU).ToList(); if (dsmn != null && dsmn.Count > 0) { //tách riêng menu theo ứng dụng List <SSOHtMenu> UDMenu; SSOHtMenu it; Hashtable umid = new Hashtable(); for (int i = 0; i < dsmn.Count; i++) { if (dsmn[i].mn != null) { if (!umid.Contains(dsmn[i].mn.MENUID)) { if (Us.ToChucMenu.Contains(dsmn[i].mn.UNGDUNGID)) { UDMenu = (List <SSOHtMenu>)Us.ToChucMenu[dsmn[i].mn.UNGDUNGID]; it = Mapper.Map <HT_MENU, SSOHtMenu>(dsmn[i].mn); UDMenu.Add(it); } else { UDMenu = new List <SSOHtMenu>(); it = Mapper.Map <HT_MENU, SSOHtMenu>(dsmn[i].mn); UDMenu.Add(it); Us.ToChucMenu.Add(dsmn[i].mn.UNGDUNGID, UDMenu); } umid.Add(dsmn[i].mn.MENUID, dsmn[i].mn.MENUID); if (!Us.DSUngDung.Contains(dsmn[i].mn.UNGDUNGID)) { ud1 = (SSOHtUngDung)Us.AllUngDung[dsmn[i].mn.UNGDUNGID]; Us.DSUngDung.Add(ud1.UNGDUNGID, ud1); } } } } } #endregion } } #endregion #endregion } #region "Lấy các thông tin liên quan user" #region "Xã - người dùng" var hcXND = (from t in db.HT_XA_NGUOIDUNG.Where(i => i.NGUOIDUNGID.Equals(user.NGUOIDUNGID)) select new { t, xa = db.HC_DMKVHC.Where(i => i.KVHCID.Equals(t.XAID)).FirstOrDefault() }).OrderBy(i => i.xa.MAKVHC).ToList(); if (hcXND != null && hcXND.Count > 0) { foreach (var it in hcXND) { //cấu hình xã cho người dùng không được vượt cấp của tổ chức - chỉ lấy xã mà tổ chức của người dùng có quyền if (it.xa != null && !cXa.Contains(it.xa.KVHCID) && Us.ToChucKVHC.Contains(it.xa.KVHCID)) { Us.NguoiDungXa.Add(Mapper.Map <HC_DMKVHC, SSOHcXa>(it.xa)); cXa.Add(it.xa.KVHCID, it.xa.KVHCID); if (!cHuyen.Contains(it.xa.HUYENID) && Us.ToChucKVHC.Contains(it.xa.HUYENID)) { sHuyen = (SSOHcHuyen)Us.ToChucKVHC[it.xa.HUYENID]; Us.NguoiDungHuyen.Add(sHuyen); cHuyen.Add(it.xa.HUYENID, it.xa.HUYENID); } } } } #endregion #region "Quyền - người dùng" var qnd = (from t in db.HT_NGUOIDUNG_QUYEN.Where(i => i.NGUOIDUNGID.Equals(user.NGUOIDUNGID)) select new { t, q = db.HT_QUYEN.Where(i => i.QUYENID.Equals(t.QUYENID)).FirstOrDefault() }).ToList(); if (qnd != null && qnd.Count > 0) { foreach (var it in qnd) { sQuyen = Mapper.Map <HT_QUYEN, SSOHtQuyen>(it.q); tenQuyen = (it.q.CONTROLLERNAME == null ? "" : it.q.CONTROLLERNAME) + "_" + (it.q.ACTIONNAME == null ? "" : it.q.ACTIONNAME); if (it.q != null && !Us.NguoiDungQuyen.Contains(tenQuyen)) { Us.NguoiDungQuyen.Add(tenQuyen, sQuyen); } } } #endregion //có thể vứt đống này đi vì không dùng //#region "Cấu hình người dùng" //var chnd = (from t in db.HT_CAUHINHNGUOIDUNG.Where(i => i.NGUOIDUNGID.Equals(user.NGUOIDUNGID)) // select t).ToList(); //if (chnd != null && chnd.Count > 0) //{ // foreach (var it in chnd) // { // if (!Us.CauHinhNguoiDung.Contains(it.TENCAUHINH)) Us.CauHinhNguoiDung.Add(it.TENCAUHINH, it); // } //} //#endregion #endregion Us.Token = Utility.GetGuidHash(); Us.User = Mapper.Map <HT_NGUOIDUNG, SSOHtNguoiDung>(user); Us.TokenExpires = DateTime.Now.AddHours(Config.AUTH_TOKEN_TIMEOUT_IN_HOURS); //cập nhật lại DONVIHANHCHINHID nếu cần if (Us.User.DONVIHANHCHINHID == null) { if (Us.NguoiDungXa.Count > 0) { string message = ""; Us.User.DONVIHANHCHINHID = Us.NguoiDungXa[0].KVHCID; UpdateUser(Us.User, out message); } } } return(Us); }
public ActionResult Login(FormCollection ketNoiForm) { string thongBao = ""; // Lay gia tri tu trang html string username = ketNoiForm["txtemail"].Trim(); string password = ketNoiForm["txtpassword"]; string ghiNhoTaikhoan = ketNoiForm["chkGhiNhoTaikhoan"]; string ReturnUrl = ketNoiForm["txtReturnUrl"]; // mã hóa password var sha = SHA256.Create(); string aa = ""; if (password != null && username != null) { var computedHash = sha.ComputeHash(Encoding.Unicode.GetBytes(password)); aa = Convert.ToBase64String(computedHash).ToString(); // Kiem tra Mat Khau co duoc lay ra tu nut ghi nho mat khau if (password.Length > 15) { if (password.Substring(0, 15) == "H1@iN9inhmpl8i6") { if (password.Length >= 45) { aa = password.Substring(30, 15) + password.Substring(15, 15) + password.Substring(45); } } } SSOUserLoginInfors Us = UserManagerService.AuthenticateUser(username, aa, ref thongBao); if (Us != null) { if (Us.ToChuc == null) { thongBao = "Tổ chức của người dùng không tồn tại. Vui lòng liên hệ với Admin"; } else { if (ghiNhoTaikhoan != null) { Response.Cookies["userName"].Value = username; Response.Cookies["userName"].Expires = DateTime.Now.AddDays(10); Response.Cookies["passNguoiDung"].Value = aa.Substring(15, 15) + aa.Substring(0, 15) + aa.Substring(30); Response.Cookies["passNguoiDung"].Expires = DateTime.Now.AddDays(10); } //Session["RequestParams"] = par; //var par = (SSOHttpRequestParams)Session["RequestParams"];// SSOHTTPRequestService.GetRequestParams(Request); string redirectUrl = UriUtil.RemoveParameter(ReturnUrl, SSOConstants.UrlParams.TOKEN); redirectUrl = Utility.GetAppendedQueryString(redirectUrl, SSOConstants.UrlParams.TOKEN, Us.Token); redirectUrl += "&NGUOIDUNGID=" + Us.User.NGUOIDUNGID; //System.Web.HttpContext.Current.Response.Redirect(""); HttpCookie aCookie = new HttpCookie(SSOConstants.Cookie.AUTH_COOKIE);//("VILISUserLoginInfo"); aCookie.Value = Us.UserCookie.Value; //đặt timeout của cookie bằng với giá trị timeout của token aCookie.Expires = DateTime.Now.AddHours(Config.AUTH_TOKEN_TIMEOUT_IN_HOURS); Response.Cookies.Add(aCookie); return(Redirect(redirectUrl)); } } else { ViewBag.ReturnUrl = ReturnUrl; ViewBag.TB = thongBao; } } return(View()); }
/// <summary> /// Determines whether the Token is expired or not /// </summary> /// <param name="expirytime"></param> /// <returns></returns> public static bool CheckExpired(SSOUserLoginInfors Us) { return(Us.TokenExpires.CompareTo(DateTime.Now) < 0); }
protected void Application_BeginRequest(object sender, EventArgs e) { HttpApplication app = (HttpApplication)sender; var request = app.Request; //với post request thì không cần kiểm tra - phục vụ login POST request if (request.HttpMethod == "POST") { return; } //nếu là request tới wep api service thì tự động bỏ qua kiểm tra, tiếp tục xử lý if (request.Url.AbsolutePath.Contains("/api/")) { return; } //Lấy thông tin xác thực từ request SSOHttpRequestParams par = SSOHTTPRequestService.GetRequestParams(request); //ngừng xử lý request do không xác định được return url sau khi xác thực if (par == null || par.ReturnUrl == null || par.ReturnUrl.Equals("")) { Utility.WriteToLogFile(DateTime.Now.ToString("dd/MM/yyyy") + ": ngừng xử lý request do không xác định được return url sau khi xác thực"); Utility.WriteToLogFile(DateTime.Now.ToString("dd/MM/yyyy") + JsonConvert.SerializeObject(par)); app.CompleteRequest(); return; } //Chỉ xử lý cho login, logout request, nếu không phải thì ngừng xử lý if (par.Action == null || !(par.Action.Equals(SSOConstants.ParamValues.LOGIN) || par.Action.Equals(SSOConstants.ParamValues.LOGOUT))) { Utility.WriteToLogFile(DateTime.Now.ToString("dd/MM/yyyy") + ": Chỉ xử lý cho login, logout request, nếu không phải thì ngừng xử lý"); app.CompleteRequest(); return; } //Logout if (par.Action.Equals(SSOConstants.ParamValues.LOGOUT)) { Utility.WriteToLogFile(DateTime.Now.ToString("dd/MM/yyyy") + ": Logout request"); UserManagerService.LogoutUser(par, SSOConstants.Cookie.AUTH_COOKIE, app); //Redirect user to default page SSOHTTPRequestService.Redirect(par.ReturnUrl, "", app); app.CompleteRequest(); return; } //Nếu là post back thì tiếp tục xử lý như bình thường - dùng cho login page post back //if (HttpContext.Current.Request.HttpMethod == "POST") return; //Session["RequestParams"] = par; //Yêu cầu login hoặc chưa xác thực, tiếp tục xử lý xác thực như bình thường if (par.Token == null || par.Token.Equals("")) { return; } //Xử lý cho trường hợp request đã xác thực, gửi lại token và redirect người dùng về trang yêu cầu //Nếu chưa xác thực, mở trang login phục vụ xác thực trước khi redirect tới trang yêu cầu SSOUserLoginInfors Us = null; if (UserManagerService.CheckRequestAuthentication(par.Token, out Us)) { Utility.WriteToLogFile(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + ": đã xác thực, ngừng xử lý"); app.Response.Cookies.Add(Us.UserCookie); Us.FirstTimeToken = true; UserManagerService.UsersLoggedIn.AddOrUpdate(Us.Token, Us, (key, existingVal) => { existingVal.FirstTimeToken = Us.FirstTimeToken; return(existingVal); }); SSOHTTPRequestService.Redirect(par.ReturnUrl, par.Token, app); app.CompleteRequest(); } }