1 //------------------------------------------------------------ 2 // Copyright (c) Microsoft Corporation. All rights reserved. 3 //------------------------------------------------------------ 4 namespace System.ServiceModel 5 { 6 using System.Runtime; 7 using System.ServiceModel.Channels; 8 using System.ComponentModel; 9 10 public sealed class WSFederationHttpSecurity 11 { 12 internal const WSFederationHttpSecurityMode DefaultMode = WSFederationHttpSecurityMode.Message; 13 14 WSFederationHttpSecurityMode mode; 15 FederatedMessageSecurityOverHttp messageSecurity; 16 WSFederationHttpSecurity()17 public WSFederationHttpSecurity() 18 : this(DefaultMode, new FederatedMessageSecurityOverHttp()) 19 { 20 } 21 WSFederationHttpSecurity(WSFederationHttpSecurityMode mode, FederatedMessageSecurityOverHttp messageSecurity)22 WSFederationHttpSecurity(WSFederationHttpSecurityMode mode, FederatedMessageSecurityOverHttp messageSecurity) 23 { 24 Fx.Assert(WSFederationHttpSecurityModeHelper.IsDefined(mode), string.Format("Invalid WSFederationHttpSecurityMode value: {0}", mode.ToString())); 25 26 this.mode = mode; 27 this.messageSecurity = messageSecurity == null ? new FederatedMessageSecurityOverHttp() : messageSecurity; 28 } 29 30 public WSFederationHttpSecurityMode Mode 31 { 32 get { return this.mode; } 33 set 34 { 35 if (!WSFederationHttpSecurityModeHelper.IsDefined(value)) 36 { 37 throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value")); 38 } 39 this.mode = value; 40 } 41 } 42 43 public FederatedMessageSecurityOverHttp Message 44 { 45 get { return this.messageSecurity; } 46 set { this.messageSecurity = value; } 47 } 48 CreateMessageSecurity(bool isReliableSessionEnabled, MessageSecurityVersion version)49 internal SecurityBindingElement CreateMessageSecurity(bool isReliableSessionEnabled, MessageSecurityVersion version) 50 { 51 if (this.mode == WSFederationHttpSecurityMode.Message || this.mode == WSFederationHttpSecurityMode.TransportWithMessageCredential) 52 { 53 return this.messageSecurity.CreateSecurityBindingElement(this.Mode == WSFederationHttpSecurityMode.TransportWithMessageCredential, isReliableSessionEnabled, version); 54 } 55 else 56 { 57 return null; 58 } 59 } 60 TryCreate(SecurityBindingElement sbe, WSFederationHttpSecurityMode mode, HttpTransportSecurity transportSecurity, bool isReliableSessionEnabled, MessageSecurityVersion version, out WSFederationHttpSecurity security)61 internal static bool TryCreate(SecurityBindingElement sbe, 62 WSFederationHttpSecurityMode mode, 63 HttpTransportSecurity transportSecurity, 64 bool isReliableSessionEnabled, 65 MessageSecurityVersion version, 66 out WSFederationHttpSecurity security) 67 { 68 security = null; 69 FederatedMessageSecurityOverHttp messageSecurity = null; 70 if (sbe == null) 71 { 72 mode = WSFederationHttpSecurityMode.None; 73 } 74 else 75 { 76 mode &= WSFederationHttpSecurityMode.Message | WSFederationHttpSecurityMode.TransportWithMessageCredential; 77 Fx.Assert(WSFederationHttpSecurityModeHelper.IsDefined(mode), string.Format("Invalid WSFederationHttpSecurityMode value: {0}", mode.ToString())); 78 79 if (!FederatedMessageSecurityOverHttp.TryCreate(sbe, mode == WSFederationHttpSecurityMode.TransportWithMessageCredential, isReliableSessionEnabled, version, out messageSecurity)) 80 return false; 81 } 82 security = new WSFederationHttpSecurity(mode, messageSecurity); 83 return true; 84 } 85 InternalShouldSerialize()86 internal bool InternalShouldSerialize() 87 { 88 return this.ShouldSerializeMode() 89 || this.ShouldSerializeMessage(); 90 } 91 92 [EditorBrowsable(EditorBrowsableState.Never)] ShouldSerializeMode()93 public bool ShouldSerializeMode() 94 { 95 return this.Mode != DefaultMode; 96 } 97 98 [EditorBrowsable(EditorBrowsableState.Never)] ShouldSerializeMessage()99 public bool ShouldSerializeMessage() 100 { 101 return this.Message.InternalShouldSerialize(); 102 } 103 } 104 } 105