public bool CheckJti() { Claim jtiClaim = ClaimsPrincipalReceived.FindFirst(x => x.Type == SupportedClaimTypes.Jti); if (jtiClaim == null) { _log.ErrorFormat("Jti Claim is null."); return(false); } bool result; _log.DebugFormat("Jti Validation Jti={0}", jtiClaim.Value); var wrapper = new CommonDbWrapper(); if (!wrapper.JtiIsExists(jtiClaim.Value)) { wrapper.SaveJti(JWT, TenantProvider.CurrentTenantID, jtiClaim.Value, JwtSecurityToken.ValidTo.AddMinutes(MAX_CLOCK_SKEW)); result = true; } else { _log.ErrorFormat("The same JTI as in one of previouses JWT"); result = false; } wrapper.RemoveOldJtis(); return(result); }
public UserInfo CreateUserInfo(SamlResponse samlResponse) { var profile = samlResponse.GetIssuer(); var extUserId = samlResponse.GetExtUserId(); var email = samlResponse.GetNameID(); UserInfo userInfo = null; if (!string.IsNullOrWhiteSpace(extUserId)) { var wrapper = new CommonDbWrapper(); var userId = wrapper.GetUserId(extUserId, profile); if (userId != null) { _log.DebugFormat("Updating new user with extUserId: {0}", extUserId); userInfo = CoreContext.UserManager.GetUsers(Guid.Parse(userId)); while (true) { int count = 0; var userByEmail = CoreContext.UserManager.GetUserByEmail(email); if (userByEmail == Constants.LostUser || userByEmail.ID == userInfo.ID) { break; } email += count++; } } if (userId == null || userInfo == Constants.LostUser) { _log.DebugFormat("Creating new user with extUserId: {0}", extUserId); userInfo = new UserInfo { ID = Guid.NewGuid() }; wrapper.SaveExtUserId(userInfo.ID.ToString(), extUserId, profile); while (true) { int count = 0; if (CoreContext.UserManager.GetUserByEmail(email) == Constants.LostUser) { break; } email += count++; } } } else { userInfo = CoreContext.UserManager.GetUserByEmail(email); if (userInfo == Constants.LostUser) { _log.DebugFormat("Creating new user with email: {0}", email); userInfo = new UserInfo(); } else { _log.DebugFormat("Updating user with email: {0}", email); } } userInfo.Email = email; userInfo.ActivationStatus = EmployeeActivationStatus.Activated; string firstName = samlResponse.GetFirstName(); string lastName = samlResponse.GetLastName(); string mobilePhone = samlResponse.GetMobilePhone(); string title = samlResponse.GetTitle(); string location = samlResponse.GetStreetAddress(); string birthDateString = samlResponse.GetBirthDate(); string sexString = samlResponse.GetSex(); if (!string.IsNullOrEmpty(firstName)) { if (firstName.Length > MAX_NUMBER_OF_SYMBOLS) { firstName = firstName.Substring(0, MAX_NUMBER_OF_SYMBOLS); } userInfo.FirstName = firstName; } if (!string.IsNullOrEmpty(lastName)) { if (lastName.Length > MAX_NUMBER_OF_SYMBOLS) { lastName = lastName.Substring(0, MAX_NUMBER_OF_SYMBOLS); } userInfo.LastName = lastName; } if (!string.IsNullOrEmpty(mobilePhone)) { userInfo.MobilePhone = mobilePhone; } if (!string.IsNullOrEmpty(title)) { userInfo.Title = title; } if (!string.IsNullOrEmpty(location)) { userInfo.Location = location; } if (!string.IsNullOrEmpty(birthDateString)) { try { userInfo.BirthDate = DateTime.Parse(birthDateString); } catch (Exception e) { _log.ErrorFormat("Parse birthDateString error: {0}, {1}", e, birthDateString); } } if (!string.IsNullOrEmpty(sexString)) { try { userInfo.Sex = Convert.ToBoolean(sexString); } catch (Exception e) { _log.ErrorFormat("Parse sexString error: {0}, {1}", e, sexString); } } if (!userInfo.WorkFromDate.HasValue) { userInfo.WorkFromDate = TenantUtil.DateTimeNow(); } return(userInfo); }
public UserInfo CreateUserInfo(ClaimsPrincipal claimsPrincipal, string profile) { Claim extUserIdClaim = claimsPrincipal.FindFirst(x => x.Type == SupportedClaimTypes.ExtUserId); var email = claimsPrincipal.FindFirst(x => x.Type == ClaimTypes.Email).Value; UserInfo userInfo = null; if (extUserIdClaim != null && !string.IsNullOrWhiteSpace(extUserIdClaim.Value)) { var wrapper = new CommonDbWrapper(); var userId = wrapper.GetUserId(extUserIdClaim.Value, profile); if (userId != null) { _log.DebugFormat("Updating new user with extUserId: {0}", extUserIdClaim.Value); userInfo = CoreContext.UserManager.GetUsers(Guid.Parse(userId)); while (true) { int count = 0; var userByEmail = CoreContext.UserManager.GetUserByEmail(email); if (userByEmail == Constants.LostUser || userByEmail.ID == userInfo.ID) { break; } email += count++; } } if (userId == null || userInfo == Constants.LostUser) { _log.DebugFormat("Creating new user with extUserId: {0}", extUserIdClaim.Value); userInfo = new UserInfo(); wrapper.SaveExtUserId(extUserIdClaim.Value, userInfo.ID.ToString(), profile); while (true) { int count = 0; if (CoreContext.UserManager.GetUserByEmail(email) == Constants.LostUser) { break; } email += count++; } } } else { userInfo = CoreContext.UserManager.GetUserByEmail(email); if (userInfo == Constants.LostUser) { _log.DebugFormat("Creating new user with email: {0}", email); userInfo = new UserInfo(); } else { _log.DebugFormat("Updating user with email: {0}", email); } } Claim givenNameClaim = claimsPrincipal.FindFirst(x => x.Type == ClaimTypes.GivenName); Claim surNameClaim = claimsPrincipal.FindFirst(x => x.Type == ClaimTypes.Surname); Claim mobilePhoneClaim = claimsPrincipal.FindFirst(x => x.Type == ClaimTypes.MobilePhone); Claim titleClaim = claimsPrincipal.FindFirst(x => x.Type == SupportedClaimTypes.Title); Claim locationClaim = claimsPrincipal.FindFirst(x => x.Type == ClaimTypes.StreetAddress); Claim birthDateClaim = claimsPrincipal.FindFirst(x => x.Type == ClaimTypes.DateOfBirth); Claim sexClaim = claimsPrincipal.FindFirst(x => x.Type == SupportedClaimTypes.Sex); userInfo.ActivationStatus = EmployeeActivationStatus.Activated; userInfo.Email = email; userInfo.FirstName = givenNameClaim != null ? givenNameClaim.Value : string.Empty; userInfo.LastName = surNameClaim != null ? surNameClaim.Value : string.Empty; userInfo.MobilePhone = mobilePhoneClaim != null ? mobilePhoneClaim.Value : string.Empty; userInfo.Title = titleClaim != null ? titleClaim.Value : string.Empty; userInfo.Location = locationClaim != null ? locationClaim.Value : string.Empty; string firstName = givenNameClaim != null ? givenNameClaim.Value : string.Empty; string lastName = surNameClaim != null ? surNameClaim.Value : string.Empty; string mobilePhone = mobilePhoneClaim != null ? mobilePhoneClaim.Value : string.Empty; string title = titleClaim != null ? titleClaim.Value : string.Empty; string location = locationClaim != null ? locationClaim.Value : string.Empty; string birthDateString = birthDateClaim != null ? birthDateClaim.Value : null; string sexString = sexClaim != null ? sexClaim.Value : null; if (!string.IsNullOrEmpty(firstName)) { if (firstName.Length > MAX_NUMBER_OF_SYMBOLS) { firstName = firstName.Substring(0, MAX_NUMBER_OF_SYMBOLS); } userInfo.FirstName = firstName; } if (!string.IsNullOrEmpty(lastName)) { if (lastName.Length > MAX_NUMBER_OF_SYMBOLS) { lastName = lastName.Substring(0, MAX_NUMBER_OF_SYMBOLS); } userInfo.LastName = lastName; } if (!string.IsNullOrEmpty(mobilePhone)) { userInfo.MobilePhone = mobilePhone; } if (!string.IsNullOrEmpty(title)) { userInfo.Title = title; } if (!string.IsNullOrEmpty(location)) { userInfo.Location = location; } if (!string.IsNullOrEmpty(birthDateString)) { try { userInfo.BirthDate = DateTime.Parse(birthDateString); } catch (Exception e) { _log.ErrorFormat("Parse birthDateString error: {0}, {1}", e, birthDateString); } } if (!string.IsNullOrEmpty(sexString)) { try { userInfo.Sex = Convert.ToBoolean(sexString); } catch (Exception e) { _log.ErrorFormat("Parse sexString error: {0}, {1}", e, sexString); } } if (!userInfo.WorkFromDate.HasValue) { userInfo.WorkFromDate = TenantUtil.DateTimeNow(); } return(userInfo); }