LocalServiceSecuritySettingsElement.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. //------------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------------------------
  4. namespace System.ServiceModel.Configuration
  5. {
  6. using System.ComponentModel;
  7. using System.Configuration;
  8. using System.Runtime;
  9. using System.ServiceModel.Channels;
  10. using System.ServiceModel.Security;
  11. public sealed partial class LocalServiceSecuritySettingsElement : ServiceModelConfigurationElement
  12. {
  13. public LocalServiceSecuritySettingsElement()
  14. {
  15. }
  16. [ConfigurationProperty(ConfigurationStrings.DetectReplays, DefaultValue = SecurityProtocolFactory.defaultDetectReplays)]
  17. public bool DetectReplays
  18. {
  19. get { return (bool)base[ConfigurationStrings.DetectReplays]; }
  20. set { base[ConfigurationStrings.DetectReplays] = value; }
  21. }
  22. [ConfigurationProperty(ConfigurationStrings.IssuedCookieLifetime, DefaultValue = SpnegoTokenAuthenticator.defaultServerIssuedTokenLifetimeString)]
  23. [TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
  24. [ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanZero)]
  25. public TimeSpan IssuedCookieLifetime
  26. {
  27. get { return (TimeSpan)base[ConfigurationStrings.IssuedCookieLifetime]; }
  28. set { base[ConfigurationStrings.IssuedCookieLifetime] = value; }
  29. }
  30. [ConfigurationProperty(ConfigurationStrings.MaxStatefulNegotiations, DefaultValue = SpnegoTokenAuthenticator.defaultServerMaxActiveNegotiations)]
  31. [IntegerValidator(MinValue = 0)]
  32. public int MaxStatefulNegotiations
  33. {
  34. get { return (int)base[ConfigurationStrings.MaxStatefulNegotiations]; }
  35. set { base[ConfigurationStrings.MaxStatefulNegotiations] = value; }
  36. }
  37. [ConfigurationProperty(ConfigurationStrings.ReplayCacheSize, DefaultValue = SecurityProtocolFactory.defaultMaxCachedNonces)]
  38. [IntegerValidator(MinValue = 1)]
  39. public int ReplayCacheSize
  40. {
  41. get { return (int)base[ConfigurationStrings.ReplayCacheSize]; }
  42. set { base[ConfigurationStrings.ReplayCacheSize] = value; }
  43. }
  44. [ConfigurationProperty(ConfigurationStrings.MaxClockSkew, DefaultValue = SecurityProtocolFactory.defaultMaxClockSkewString)]
  45. [TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
  46. [ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanZero)]
  47. public TimeSpan MaxClockSkew
  48. {
  49. get { return (TimeSpan)base[ConfigurationStrings.MaxClockSkew]; }
  50. set { base[ConfigurationStrings.MaxClockSkew] = value; }
  51. }
  52. [ConfigurationProperty(ConfigurationStrings.NegotiationTimeout, DefaultValue = SpnegoTokenAuthenticator.defaultServerMaxNegotiationLifetimeString)]
  53. [TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
  54. [ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanZero)]
  55. public TimeSpan NegotiationTimeout
  56. {
  57. get { return (TimeSpan)base[ConfigurationStrings.NegotiationTimeout]; }
  58. set { base[ConfigurationStrings.NegotiationTimeout] = value; }
  59. }
  60. [ConfigurationProperty(ConfigurationStrings.ReplayWindow, DefaultValue = SecurityProtocolFactory.defaultReplayWindowString)]
  61. [TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
  62. [ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanZero)]
  63. public TimeSpan ReplayWindow
  64. {
  65. get { return (TimeSpan)base[ConfigurationStrings.ReplayWindow]; }
  66. set { base[ConfigurationStrings.ReplayWindow] = value; }
  67. }
  68. [ConfigurationProperty(ConfigurationStrings.InactivityTimeout, DefaultValue = SecuritySessionServerSettings.defaultInactivityTimeoutString)]
  69. [TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
  70. [ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanZero)]
  71. public TimeSpan InactivityTimeout
  72. {
  73. get { return (TimeSpan)base[ConfigurationStrings.InactivityTimeout]; }
  74. set { base[ConfigurationStrings.InactivityTimeout] = value; }
  75. }
  76. [ConfigurationProperty(ConfigurationStrings.SessionKeyRenewalInterval, DefaultValue = SecuritySessionServerSettings.defaultKeyRenewalIntervalString)]
  77. [TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
  78. [ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanZero)]
  79. public TimeSpan SessionKeyRenewalInterval
  80. {
  81. get { return (TimeSpan)base[ConfigurationStrings.SessionKeyRenewalInterval]; }
  82. set { base[ConfigurationStrings.SessionKeyRenewalInterval] = value; }
  83. }
  84. [ConfigurationProperty(ConfigurationStrings.SessionKeyRolloverInterval, DefaultValue = SecuritySessionServerSettings.defaultKeyRolloverIntervalString)]
  85. [TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
  86. [ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanZero)]
  87. public TimeSpan SessionKeyRolloverInterval
  88. {
  89. get { return (TimeSpan)base[ConfigurationStrings.SessionKeyRolloverInterval]; }
  90. set { base[ConfigurationStrings.SessionKeyRolloverInterval] = value; }
  91. }
  92. [ConfigurationProperty(ConfigurationStrings.ReconnectTransportOnFailure, DefaultValue = SecuritySessionServerSettings.defaultTolerateTransportFailures)]
  93. public bool ReconnectTransportOnFailure
  94. {
  95. get { return (bool)base[ConfigurationStrings.ReconnectTransportOnFailure]; }
  96. set { base[ConfigurationStrings.ReconnectTransportOnFailure] = value; }
  97. }
  98. [ConfigurationProperty(ConfigurationStrings.MaxPendingSessions, DefaultValue = SecuritySessionServerSettings.defaultMaximumPendingSessions)]
  99. [IntegerValidator(MinValue = 1)]
  100. public int MaxPendingSessions
  101. {
  102. get { return (int)base[ConfigurationStrings.MaxPendingSessions]; }
  103. set { base[ConfigurationStrings.MaxPendingSessions] = value; }
  104. }
  105. [ConfigurationProperty(ConfigurationStrings.MaxCachedCookies, DefaultValue = SpnegoTokenAuthenticator.defaultServerMaxCachedTokens)]
  106. [IntegerValidator(MinValue = 0)]
  107. public int MaxCachedCookies
  108. {
  109. get { return (int)base[ConfigurationStrings.MaxCachedCookies]; }
  110. set { base[ConfigurationStrings.MaxCachedCookies] = value; }
  111. }
  112. [ConfigurationProperty(ConfigurationStrings.TimestampValidityDuration, DefaultValue = SecurityProtocolFactory.defaultTimestampValidityDurationString)]
  113. [TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
  114. [ServiceModelTimeSpanValidator(MinValueString = ConfigurationStrings.TimeSpanZero)]
  115. public TimeSpan TimestampValidityDuration
  116. {
  117. get { return (TimeSpan)base[ConfigurationStrings.TimestampValidityDuration]; }
  118. set { base[ConfigurationStrings.TimestampValidityDuration] = value; }
  119. }
  120. internal void ApplyConfiguration(LocalServiceSecuritySettings settings)
  121. {
  122. if (settings == null)
  123. {
  124. throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("settings");
  125. }
  126. if (PropertyValueOrigin.Default != this.ElementInformation.Properties[ConfigurationStrings.DetectReplays].ValueOrigin)
  127. settings.DetectReplays = this.DetectReplays;
  128. settings.IssuedCookieLifetime = this.IssuedCookieLifetime;
  129. settings.MaxClockSkew = this.MaxClockSkew;
  130. settings.MaxPendingSessions = this.MaxPendingSessions;
  131. settings.MaxStatefulNegotiations = this.MaxStatefulNegotiations;
  132. settings.NegotiationTimeout = this.NegotiationTimeout;
  133. settings.ReconnectTransportOnFailure = this.ReconnectTransportOnFailure;
  134. settings.ReplayCacheSize = this.ReplayCacheSize;
  135. settings.ReplayWindow = this.ReplayWindow;
  136. settings.SessionKeyRenewalInterval = this.SessionKeyRenewalInterval;
  137. settings.SessionKeyRolloverInterval = this.SessionKeyRolloverInterval;
  138. settings.InactivityTimeout = this.InactivityTimeout;
  139. settings.TimestampValidityDuration = this.TimestampValidityDuration;
  140. settings.MaxCachedCookies = this.MaxCachedCookies;
  141. }
  142. internal void InitializeFrom(LocalServiceSecuritySettings settings)
  143. {
  144. if (settings == null)
  145. {
  146. throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("settings");
  147. }
  148. this.DetectReplays = settings.DetectReplays; // can't use default value optimization here because runtime default doesn't match config default
  149. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.IssuedCookieLifetime, settings.IssuedCookieLifetime);
  150. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxClockSkew, settings.MaxClockSkew);
  151. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxPendingSessions, settings.MaxPendingSessions);
  152. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxStatefulNegotiations, settings.MaxStatefulNegotiations);
  153. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.NegotiationTimeout, settings.NegotiationTimeout);
  154. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ReconnectTransportOnFailure, settings.ReconnectTransportOnFailure);
  155. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ReplayCacheSize, settings.ReplayCacheSize);
  156. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ReplayWindow, settings.ReplayWindow);
  157. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.SessionKeyRenewalInterval, settings.SessionKeyRenewalInterval);
  158. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.SessionKeyRolloverInterval, settings.SessionKeyRolloverInterval);
  159. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.InactivityTimeout, settings.InactivityTimeout);
  160. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.TimestampValidityDuration, settings.TimestampValidityDuration);
  161. SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxCachedCookies, settings.MaxCachedCookies);
  162. }
  163. internal void CopyFrom(LocalServiceSecuritySettingsElement source)
  164. {
  165. if (source == null)
  166. {
  167. throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("source");
  168. }
  169. if (PropertyValueOrigin.Default != source.ElementInformation.Properties[ConfigurationStrings.DetectReplays].ValueOrigin)
  170. this.DetectReplays = source.DetectReplays;
  171. this.IssuedCookieLifetime = source.IssuedCookieLifetime;
  172. this.MaxClockSkew = source.MaxClockSkew;
  173. this.MaxPendingSessions = source.MaxPendingSessions;
  174. this.MaxStatefulNegotiations = source.MaxStatefulNegotiations;
  175. this.NegotiationTimeout = source.NegotiationTimeout;
  176. this.ReconnectTransportOnFailure = source.ReconnectTransportOnFailure;
  177. this.ReplayCacheSize = source.ReplayCacheSize;
  178. this.ReplayWindow = source.ReplayWindow;
  179. this.SessionKeyRenewalInterval = source.SessionKeyRenewalInterval;
  180. this.SessionKeyRolloverInterval = source.SessionKeyRolloverInterval;
  181. this.InactivityTimeout = source.InactivityTimeout;
  182. this.TimestampValidityDuration = source.TimestampValidityDuration;
  183. this.MaxCachedCookies = source.MaxCachedCookies;
  184. }
  185. }
  186. }