Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / MessageSecurityOverMsmq.cs / 1 / MessageSecurityOverMsmq.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.ServiceModel
{
using System.Net.Security;
using System.ServiceModel.Channels;
using System.ServiceModel.Security;
using System.ServiceModel.Security.Tokens;
using System.Runtime.CompilerServices;
public sealed class MessageSecurityOverMsmq
{
internal const MessageCredentialType DefaultClientCredentialType = MessageCredentialType.Windows;
MessageCredentialType clientCredentialType;
SecurityAlgorithmSuite algorithmSuite;
bool wasAlgorithmSuiteSet;
internal MessageSecurityOverMsmq()
{
clientCredentialType = DefaultClientCredentialType;
algorithmSuite = SecurityAlgorithmSuite.Default;
}
public MessageCredentialType ClientCredentialType
{
get { return this.clientCredentialType; }
set
{
if (!MessageCredentialTypeHelper.IsDefined(value))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
}
this.clientCredentialType = value;
}
}
public SecurityAlgorithmSuite AlgorithmSuite
{
get { return this.algorithmSuite; }
set
{
if (value == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
}
this.algorithmSuite = value;
wasAlgorithmSuiteSet = true;
}
}
internal bool WasAlgorithmSuiteSet
{
get { return this.wasAlgorithmSuiteSet; }
}
[MethodImpl(MethodImplOptions.NoInlining)]
internal SecurityBindingElement CreateSecurityBindingElement()
{
SymmetricSecurityBindingElement result;
bool isKerberosSelected = false;
switch (this.clientCredentialType)
{
case MessageCredentialType.None:
result = SecurityBindingElement.CreateAnonymousForCertificateBindingElement();
break;
case MessageCredentialType.UserName:
result = SecurityBindingElement.CreateUserNameForCertificateBindingElement();
break;
case MessageCredentialType.Certificate:
result = (SymmetricSecurityBindingElement)SecurityBindingElement.CreateMutualCertificateBindingElement();
break;
case MessageCredentialType.Windows:
result = SecurityBindingElement.CreateKerberosBindingElement();
isKerberosSelected = true;
break;
case MessageCredentialType.IssuedToken:
result = SecurityBindingElement.CreateIssuedTokenForCertificateBindingElement(IssuedSecurityTokenParameters.CreateInfoCardParameters(new SecurityStandardsManager(), this.algorithmSuite));
break;
default:
DiagnosticUtility.DebugAssert("unknown ClientCredentialType");
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException());
}
result.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11;
// set the algorithm suite and issued token params if required
if (wasAlgorithmSuiteSet || !isKerberosSelected)
{
result.DefaultAlgorithmSuite = this.AlgorithmSuite;
}
else if (isKerberosSelected)
{
result.DefaultAlgorithmSuite = SecurityAlgorithmSuite.KerberosDefault;
}
result.IncludeTimestamp = false;
result.LocalServiceSettings.DetectReplays = false;
result.LocalClientSettings.DetectReplays = false;
return result;
}
internal static bool TryCreate(SecurityBindingElement sbe, out MessageSecurityOverMsmq messageSecurity)
{
messageSecurity = null;
if (sbe == null)
return false;
SymmetricSecurityBindingElement ssbe = sbe as SymmetricSecurityBindingElement;
if (ssbe == null)
return false;
if (sbe.MessageSecurityVersion != MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10
&& sbe.MessageSecurityVersion != MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11)
{
return false;
}
// do not check local settings: sbe.LocalServiceSettings and sbe.LocalClientSettings
if (ssbe.IncludeTimestamp)
return false;
bool isKerberosSelected = false;
MessageCredentialType clientCredentialType;
IssuedSecurityTokenParameters issuedParameters;
if (SecurityBindingElement.IsAnonymousForCertificateBinding(sbe))
{
clientCredentialType = MessageCredentialType.None;
}
else if (SecurityBindingElement.IsUserNameForCertificateBinding(sbe))
{
clientCredentialType = MessageCredentialType.UserName;
}
else if (SecurityBindingElement.IsMutualCertificateBinding(sbe))
{
clientCredentialType = MessageCredentialType.Certificate;
}
else if (SecurityBindingElement.IsKerberosBinding(sbe))
{
clientCredentialType = MessageCredentialType.Windows;
isKerberosSelected = true;
}
else if (SecurityBindingElement.IsIssuedTokenForCertificateBinding(sbe, out issuedParameters))
{
if (!IssuedSecurityTokenParameters.IsInfoCardParameters(issuedParameters))
return false;
clientCredentialType = MessageCredentialType.IssuedToken;
}
else
{
return false;
}
messageSecurity = new MessageSecurityOverMsmq();
messageSecurity.ClientCredentialType = clientCredentialType;
// set the algorithm suite and issued token params if required
if (clientCredentialType != MessageCredentialType.IssuedToken && !isKerberosSelected)
{
messageSecurity.AlgorithmSuite = ssbe.DefaultAlgorithmSuite;
}
return true;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TextPatternIdentifiers.cs
- PartBasedPackageProperties.cs
- TextBoxAutoCompleteSourceConverter.cs
- TreeNodeConverter.cs
- RectAnimationUsingKeyFrames.cs
- TextContainerHelper.cs
- SqlClientMetaDataCollectionNames.cs
- ComponentConverter.cs
- DefaultValueAttribute.cs
- AuthenticationConfig.cs
- DisplayMemberTemplateSelector.cs
- RestHandlerFactory.cs
- WebPartCatalogCloseVerb.cs
- ObjectDataSourceEventArgs.cs
- PropertyManager.cs
- ProcessHostConfigUtils.cs
- LongValidatorAttribute.cs
- Object.cs
- ArglessEventHandlerProxy.cs
- dsa.cs
- ChannelSettingsElement.cs
- SingleObjectCollection.cs
- MultiAsyncResult.cs
- HandlerMappingMemo.cs
- HandleRef.cs
- UnsafeNativeMethods.cs
- Rotation3D.cs
- ToolStripSeparator.cs
- ServiceHttpModule.cs
- ObjectAnimationBase.cs
- BitmapMetadataBlob.cs
- VariableQuery.cs
- ContentElement.cs
- DataGridViewRowContextMenuStripNeededEventArgs.cs
- CodeDirectiveCollection.cs
- Html32TextWriter.cs
- MiniModule.cs
- ValidatorUtils.cs
- TextEditorMouse.cs
- GeneralTransform3DCollection.cs
- ToolStripItemBehavior.cs
- ExtensionSimplifierMarkupObject.cs
- DbInsertCommandTree.cs
- SystemColorTracker.cs
- DbProviderConfigurationHandler.cs
- SchemaImporterExtensionElementCollection.cs
- ParallelTimeline.cs
- Msec.cs
- StyleXamlParser.cs
- Base64Stream.cs
- SqlCacheDependencyDatabaseCollection.cs
- Clock.cs
- DataTableReaderListener.cs
- SQLConvert.cs
- Condition.cs
- XmlDocumentFragment.cs
- RbTree.cs
- QilTypeChecker.cs
- CodePageUtils.cs
- ellipse.cs
- GridViewColumn.cs
- SafeCancelMibChangeNotify.cs
- MatrixKeyFrameCollection.cs
- Sorting.cs
- StringSorter.cs
- WindowsListViewGroupHelper.cs
- ScrollableControl.cs
- CFGGrammar.cs
- LabelEditEvent.cs
- lengthconverter.cs
- AuthorizationSection.cs
- DoubleLink.cs
- CustomBinding.cs
- CompilerState.cs
- Point3DAnimation.cs
- BoundsDrawingContextWalker.cs
- TypeInfo.cs
- Rect.cs
- XhtmlConformanceSection.cs
- SizeAnimationBase.cs
- GridViewRowCollection.cs
- CompositionTarget.cs
- AuthenticationModulesSection.cs
- ToolZone.cs
- StorageBasedPackageProperties.cs
- BooleanProjectedSlot.cs
- GraphicsState.cs
- MappingSource.cs
- RoutedEvent.cs
- PageClientProxyGenerator.cs
- SamlAttributeStatement.cs
- OdbcParameterCollection.cs
- DataSourceView.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- WebPartMinimizeVerb.cs
- DCSafeHandle.cs
- WsdlEndpointConversionContext.cs
- ToolBarButtonDesigner.cs
- ApplicationFileParser.cs
- InstanceNotFoundException.cs