public ChannelFactoryService([ServiceDependency] IUserSessionService userSessionService, SecurityTokenCache tokenCache) { _userSessionService = userSessionService; _channelPoolDictionary = new Dictionary <Type, object>(); _tokenCache = tokenCache; if (_tokenCache == null) { _tokenCache = new SecurityTokenCache(); } ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback((sender, certificate, chain, sslPolicyErrors) => { if (sslPolicyErrors == SslPolicyErrors.None) { return(true); } else if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateChainErrors) { if (chain.ChainStatus.Count() == 1) { if (chain.ChainStatus[0].Status == X509ChainStatusFlags.UntrustedRoot || chain.ChainStatus[0].Status == X509ChainStatusFlags.PartialChain) { //Accept self-signed certificates return(true); } } } return(false); }); }
public virtual async Task SendChangePhoneNumberCodeAsync(SendChangePhoneNumberCodeDto input) { var securityTokenCacheKey = SmsSecurityTokenCacheItem.CalculateCacheKey(input.NewPhoneNumber, "SmsChangePhoneNumber"); var securityTokenCacheItem = await SecurityTokenCache.GetAsync(securityTokenCacheKey); var interval = await SettingProvider.GetAsync(Settings.IdentitySettingNames.User.SmsRepetInterval, 1); if (securityTokenCacheItem != null) { throw new UserFriendlyException(L["SendRepeatPhoneVerifyCode", interval]); } // 是否已有用户使用手机号绑定 if (await UserRepository.IsPhoneNumberConfirmedAsync(input.NewPhoneNumber)) { throw new BusinessException(IdentityErrorCodes.DuplicatePhoneNumber); } var user = await UserManager.GetByIdAsync(CurrentUser.GetId()); var template = await SettingProvider.GetOrNullAsync(Settings.IdentitySettingNames.User.SmsPhoneNumberConfirmed); var token = await UserManager.GenerateChangePhoneNumberTokenAsync(user, input.NewPhoneNumber); // 发送验证码 await SecurityCodeSender.SendPhoneConfirmedCodeAsync(input.NewPhoneNumber, token, template); securityTokenCacheItem = new SmsSecurityTokenCacheItem(token, user.ConcurrencyStamp); await SecurityTokenCache .SetAsync(securityTokenCacheKey, securityTokenCacheItem, new DistributedCacheEntryOptions { AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(interval) }); }
private string getSecurityToken() { SecurityTokenCache tokenCache = WorkItem.RootWorkItem.Items.FindByType <SecurityTokenCache>().Last(); DateTime validTo = tokenCache.Token.ValidTo.ToLocalTime(); if (DateTime.Now.CompareTo(validTo) >= 0) { MessageBox.Show(Resources.LoginSessionExpired_text); throw new SecurityTokenExpiredException(); } return(tokenCache.GetTokenXmlAsString()); }
public PassiveRepositorySessionSecurityTokenCache( ITokenCacheRepository tokenCacheRepository, SecurityTokenCache inner) { if (tokenCacheRepository == null) throw new ArgumentNullException("tokenCacheRepository"); if (inner == null) throw new ArgumentNullException("inner"); this.tokenCacheRepository = tokenCacheRepository; this.inner = inner; serializer = new SessionSecurityTokenCookieSerializer(); }
public virtual async Task ChangePhoneNumberAsync(ChangePhoneNumberDto input) { // 是否已有用户使用手机号绑定 if (await UserRepository.IsPhoneNumberConfirmedAsync(input.NewPhoneNumber)) { throw new BusinessException(IdentityErrorCodes.DuplicatePhoneNumber); } //TODO: 可以查询缓存用 securityTokenCacheItem.SecurityToken 与 user.SecurityStamp 作对比 var user = await UserManager.GetByIdAsync(CurrentUser.GetId()); // 更换手机号 (await UserManager.ChangePhoneNumberAsync(user, input.NewPhoneNumber, input.Code)).CheckErrors(); await CurrentUnitOfWork.SaveChangesAsync(); var securityTokenCacheKey = SmsSecurityTokenCacheItem.CalculateCacheKey(input.NewPhoneNumber, "SmsChangePhoneNumber"); await SecurityTokenCache.RemoveAsync(securityTokenCacheKey); }
public PassiveRepositorySessionSecurityTokenCache( ITokenCacheRepository tokenCacheRepository, SecurityTokenCache inner) { if (tokenCacheRepository == null) { throw new ArgumentNullException("tokenCacheRepository"); } if (inner == null) { throw new ArgumentNullException("inner"); } this.tokenCacheRepository = tokenCacheRepository; this.inner = inner; serializer = new SessionSecurityTokenCookieSerializer(); }
public MachineKeySessionSecurityTokenHandler(SecurityTokenCache cache, TimeSpan tokenLifetime) : base(CreateTransforms(), cache, tokenLifetime) { }
public LoginController() { _loadedEvent = new EventWaitHandle(false, EventResetMode.AutoReset); _tokenCache = new SecurityTokenCache(); }
private void StartShell() { AppDomain domain = null; IntPtr password = default(IntPtr); bool logout = false; try { AppDomainSetup setup = new AppDomainSetup(); setup.ConfigurationFile = UserSessionService.ConfigFilename; setup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; string assemblyName = "Imi.SupplyChain.UX.Shell"; string instanceTypeName = "Imi.SupplyChain.UX.Shell.ShellApplication"; domain = AppDomain.CreateDomain("login", null, setup, new PermissionSet(PermissionState.Unrestricted)); string securityTokenXml = null; if (_tokenCache.RawToken != null) { securityTokenXml = SecurityTokenCache.Serialize(_tokenCache); } if (UserSessionService.Password != null) { password = SecureStringHelper.GetString(UserSessionService.Password); UserSessionService.Password = null; } object[] args = new object[4] { password, UserSessionService, _loadedEvent, securityTokenXml }; CleanTempFiles(); ThreadPool.QueueUserWorkItem(WaitForShellStartCallback); domain.CreateInstance(assemblyName, instanceTypeName, true, BindingFlags.CreateInstance, null, args, null, null); password = default(IntPtr); logout = domain.GetData("Logout") != null; } catch (ThreadAbortException) { } catch (Exception ex) { EventLog.WriteEntry(StringResources.Title, ex.ToString(), EventLogEntryType.Error); throw; } finally { if (password != default(IntPtr)) { SecureStringHelper.FreeString(password); } if (domain != null) { try { AppDomain.Unload(domain); } catch (CannotUnloadAppDomainException) { } finally { domain = null; } } try { File.Delete(UserSessionService.ConfigFilename); } catch (Exception) { } CleanTempFiles(); if (logout) { _loginWindow.Dispatcher.Invoke(new Action(() => { ShowLogin(true); _loginWindow.Show(); })); } else { _loginWindow.Closing -= LoginWindowClosingEventHandler; _loginWindow.Dispatcher.Invoke(new Action(() => { _loginWindow.Close(); })); } } }