ServiceAuthorizationElement.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. //------------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------------------------
  4. namespace System.ServiceModel.Configuration
  5. {
  6. using System.Collections.Generic;
  7. using System.ServiceModel.Channels;
  8. using System.ServiceModel;
  9. using System.ServiceModel.Activation;
  10. using System.ServiceModel.Description;
  11. using System.ServiceModel.Security;
  12. using System.ComponentModel;
  13. using System.Configuration;
  14. using System.IdentityModel.Claims;
  15. using System.IdentityModel.Policy;
  16. public sealed partial class ServiceAuthorizationElement : BehaviorExtensionElement
  17. {
  18. public ServiceAuthorizationElement()
  19. {
  20. }
  21. [ConfigurationProperty(ConfigurationStrings.PrincipalPermissionMode, DefaultValue = PrincipalPermissionMode.UseWindowsGroups)]
  22. [ServiceModelEnumValidator(typeof(PrincipalPermissionModeHelper))]
  23. public PrincipalPermissionMode PrincipalPermissionMode
  24. {
  25. get { return (PrincipalPermissionMode)base[ConfigurationStrings.PrincipalPermissionMode]; }
  26. set { base[ConfigurationStrings.PrincipalPermissionMode] = value; }
  27. }
  28. [ConfigurationProperty(ConfigurationStrings.RoleProviderName, DefaultValue = "")]
  29. [StringValidator(MinLength = 0)]
  30. public string RoleProviderName
  31. {
  32. get { return (string)base[ConfigurationStrings.RoleProviderName]; }
  33. set
  34. {
  35. if (String.IsNullOrEmpty(value))
  36. {
  37. value = String.Empty;
  38. }
  39. base[ConfigurationStrings.RoleProviderName] = value;
  40. }
  41. }
  42. [ConfigurationProperty(ConfigurationStrings.ImpersonateCallerForAllOperations, DefaultValue = ServiceAuthorizationBehavior.DefaultImpersonateCallerForAllOperations)]
  43. public bool ImpersonateCallerForAllOperations
  44. {
  45. get { return (bool)base[ConfigurationStrings.ImpersonateCallerForAllOperations]; }
  46. set { base[ConfigurationStrings.ImpersonateCallerForAllOperations] = value; }
  47. }
  48. [ConfigurationProperty(ConfigurationStrings.ImpersonateOnSerializingReply, DefaultValue = ServiceAuthorizationBehavior.DefaultImpersonateOnSerializingReply)]
  49. public bool ImpersonateOnSerializingReply
  50. {
  51. get { return (bool)base[ConfigurationStrings.ImpersonateOnSerializingReply]; }
  52. set { base[ConfigurationStrings.ImpersonateOnSerializingReply] = value; }
  53. }
  54. [ConfigurationProperty(ConfigurationStrings.ServiceAuthorizationManagerType, DefaultValue = "")]
  55. [StringValidator(MinLength = 0)]
  56. public string ServiceAuthorizationManagerType
  57. {
  58. get { return (string)base[ConfigurationStrings.ServiceAuthorizationManagerType]; }
  59. set
  60. {
  61. if (String.IsNullOrEmpty(value))
  62. {
  63. value = String.Empty;
  64. }
  65. base[ConfigurationStrings.ServiceAuthorizationManagerType] = value;
  66. }
  67. }
  68. [ConfigurationProperty(ConfigurationStrings.AuthorizationPolicies)]
  69. public AuthorizationPolicyTypeElementCollection AuthorizationPolicies
  70. {
  71. get { return (AuthorizationPolicyTypeElementCollection)base[ConfigurationStrings.AuthorizationPolicies]; }
  72. }
  73. public override void CopyFrom(ServiceModelExtensionElement from)
  74. {
  75. base.CopyFrom(from);
  76. ServiceAuthorizationElement source = (ServiceAuthorizationElement)from;
  77. #pragma warning suppress 56506 //[....]; base.CopyFrom() checks for 'from' being null
  78. this.PrincipalPermissionMode = source.PrincipalPermissionMode;
  79. this.RoleProviderName = source.RoleProviderName;
  80. this.ImpersonateCallerForAllOperations = source.ImpersonateCallerForAllOperations;
  81. this.ImpersonateOnSerializingReply = source.ImpersonateOnSerializingReply;
  82. this.ServiceAuthorizationManagerType = source.ServiceAuthorizationManagerType;
  83. AuthorizationPolicyTypeElementCollection srcAuthorizationPolicies = source.AuthorizationPolicies;
  84. AuthorizationPolicyTypeElementCollection dstAuthorizationPolicies = this.AuthorizationPolicies;
  85. for (int i = 0; i < srcAuthorizationPolicies.Count; ++i)
  86. {
  87. dstAuthorizationPolicies.Add(srcAuthorizationPolicies[i]);
  88. }
  89. }
  90. protected internal override object CreateBehavior()
  91. {
  92. ServiceAuthorizationBehavior behavior = new ServiceAuthorizationBehavior();
  93. behavior.PrincipalPermissionMode = this.PrincipalPermissionMode;
  94. string roleProviderName = this.RoleProviderName;
  95. if (!String.IsNullOrEmpty(roleProviderName))
  96. {
  97. behavior.RoleProvider = SystemWebHelper.GetRoleProvider(roleProviderName);
  98. if (behavior.RoleProvider == null)
  99. {
  100. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(
  101. SR.GetString(SR.InvalidRoleProviderSpecifiedInConfig, roleProviderName)));
  102. }
  103. }
  104. behavior.ImpersonateCallerForAllOperations = this.ImpersonateCallerForAllOperations;
  105. behavior.ImpersonateOnSerializingReply = this.ImpersonateOnSerializingReply;
  106. string serviceAuthorizationManagerType = this.ServiceAuthorizationManagerType;
  107. if (!String.IsNullOrEmpty(serviceAuthorizationManagerType))
  108. {
  109. Type type = Type.GetType(serviceAuthorizationManagerType, true);
  110. if (!typeof(ServiceAuthorizationManager).IsAssignableFrom(type))
  111. {
  112. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(
  113. SR.GetString(SR.ConfigInvalidServiceAuthorizationManagerType, serviceAuthorizationManagerType, typeof(ServiceAuthorizationManager))));
  114. }
  115. behavior.ServiceAuthorizationManager = (ServiceAuthorizationManager)Activator.CreateInstance(type);
  116. }
  117. AuthorizationPolicyTypeElementCollection authorizationPolicies = this.AuthorizationPolicies;
  118. if (authorizationPolicies.Count > 0)
  119. {
  120. List<IAuthorizationPolicy> policies = new List<IAuthorizationPolicy>(authorizationPolicies.Count);
  121. for (int i = 0; i < authorizationPolicies.Count; ++i)
  122. {
  123. Type type = Type.GetType(authorizationPolicies[i].PolicyType, true);
  124. if (!typeof(IAuthorizationPolicy).IsAssignableFrom(type))
  125. {
  126. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(
  127. SR.GetString(SR.ConfigInvalidAuthorizationPolicyType, authorizationPolicies[i].PolicyType, typeof(IAuthorizationPolicy))));
  128. }
  129. policies.Add((IAuthorizationPolicy)Activator.CreateInstance(type));
  130. }
  131. behavior.ExternalAuthorizationPolicies = policies.AsReadOnly();
  132. }
  133. return behavior;
  134. }
  135. public override Type BehaviorType
  136. {
  137. get { return typeof(ServiceAuthorizationBehavior); }
  138. }
  139. }
  140. }