Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / AcceptorSessionSymmetricTransportSecurityProtocol.cs / 1 / AcceptorSessionSymmetricTransportSecurityProtocol.cs
//----------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.ServiceModel.Security
{
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Collections.ObjectModel;
using System.IO;
using System.IdentityModel.Tokens;
using System.IdentityModel.Selectors;
using System.IdentityModel.Claims;
using System.IdentityModel.Policy;
using System.Security.Cryptography;
using System.ServiceModel.Security.Tokens;
using System.ServiceModel.Channels;
using System.Runtime.InteropServices;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
sealed class AcceptorSessionSymmetricTransportSecurityProtocol : TransportSecurityProtocol, IAcceptorSecuritySessionProtocol
{
SecurityToken outgoingSessionToken;
SecurityTokenAuthenticator sessionTokenAuthenticator;
SecurityTokenResolver sessionTokenResolver;
ReadOnlyCollection sessionTokenResolverList;
UniqueId sessionId;
Collection sessionTokenAuthenticatorSpecificationList;
bool requireDerivedKeys;
public AcceptorSessionSymmetricTransportSecurityProtocol(SessionSymmetricTransportSecurityProtocolFactory factory) : base(factory, null, null)
{
if (factory.ActAsInitiator == true)
{
DiagnosticUtility.DebugAssert("This protocol can only be used at the recipient.");
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.ProtocolMustBeRecipient, this.GetType().ToString())));
}
this.requireDerivedKeys = factory.SecurityTokenParameters.RequireDerivedKeys;
}
SessionSymmetricTransportSecurityProtocolFactory Factory
{
get { return (SessionSymmetricTransportSecurityProtocolFactory)this.SecurityProtocolFactory; }
}
public bool ReturnCorrelationState
{
get
{
return false;
}
set
{
}
}
public void SetSessionTokenAuthenticator(UniqueId sessionId, SecurityTokenAuthenticator sessionTokenAuthenticator, SecurityTokenResolver sessionTokenResolver)
{
this.CommunicationObject.ThrowIfDisposedOrImmutable();
this.sessionId = sessionId;
this.sessionTokenResolver = sessionTokenResolver;
Collection tmp = new Collection();
tmp.Add(this.sessionTokenResolver);
this.sessionTokenResolverList = new ReadOnlyCollection(tmp);
this.sessionTokenAuthenticator = sessionTokenAuthenticator;
SupportingTokenAuthenticatorSpecification spec = new SupportingTokenAuthenticatorSpecification(this.sessionTokenAuthenticator, this.sessionTokenResolver, SecurityTokenAttachmentMode.Endorsing, this.Factory.SecurityTokenParameters);
this.sessionTokenAuthenticatorSpecificationList = new Collection();
this.sessionTokenAuthenticatorSpecificationList.Add(spec);
}
public SecurityToken GetOutgoingSessionToken()
{
return this.outgoingSessionToken;
}
public void SetOutgoingSessionToken(SecurityToken token)
{
if (token == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("token");
}
this.outgoingSessionToken = token;
}
protected override void VerifyIncomingMessageCore(ref Message message, TimeSpan timeout)
{
string actor = string.Empty; // message.Version.Envelope.UltimateDestinationActor;
ReceiveSecurityHeader securityHeader = this.Factory.StandardsManager.CreateReceiveSecurityHeader(message, actor,
this.Factory.IncomingAlgorithmSuite, MessageDirection.Input);
securityHeader.RequireMessageProtection = false;
securityHeader.ReaderQuotas = this.Factory.SecurityBindingElement.ReaderQuotas;
IList supportingAuthenticators = GetSupportingTokenAuthenticatorsAndSetExpectationFlags(this.Factory, message, securityHeader);
ReadOnlyCollection mergedTokenResolvers = MergeOutOfBandResolvers(supportingAuthenticators, this.sessionTokenResolverList);
if (supportingAuthenticators != null && supportingAuthenticators.Count > 0)
{
supportingAuthenticators = new List(supportingAuthenticators);
supportingAuthenticators.Insert(0, this.sessionTokenAuthenticatorSpecificationList[0]);
}
else
{
supportingAuthenticators = this.sessionTokenAuthenticatorSpecificationList;
}
securityHeader.ConfigureTransportBindingServerReceiveHeader(supportingAuthenticators);
securityHeader.ConfigureOutOfBandTokenResolver(mergedTokenResolvers);
securityHeader.ExpectEndorsingTokens = true;
TimeoutHelper timeoutHelper = new TimeoutHelper(timeout);
securityHeader.SetTimeParameters(this.Factory.NonceCache, this.Factory.ReplayWindow, this.Factory.MaxClockSkew);
// do not enforce key derivation requirement for Cancel messages due to WSE interop
securityHeader.EnforceDerivedKeyRequirement = (message.Headers.Action != this.Factory.StandardsManager.SecureConversationDriver.CloseAction.Value);
securityHeader.Process(timeoutHelper.RemainingTime());
if (securityHeader.Timestamp == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new MessageSecurityException(SR.GetString(SR.RequiredTimestampMissingInSecurityHeader)));
}
bool didSessionSctEndorse = false;
if (securityHeader.EndorsingSupportingTokens != null)
{
for (int i = 0; i < securityHeader.EndorsingSupportingTokens.Count; ++i)
{
SecurityContextSecurityToken signingSct = (securityHeader.EndorsingSupportingTokens[i] as SecurityContextSecurityToken);
if (signingSct != null && signingSct.ContextId == this.sessionId)
{
didSessionSctEndorse = true;
break;
}
}
}
if (!didSessionSctEndorse)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new MessageSecurityException(SR.GetString(SR.NoSessionTokenPresentInMessage)));
}
message = securityHeader.ProcessedMessage;
AttachRecipientSecurityProperty(message, securityHeader.BasicSupportingTokens, securityHeader.EndorsingSupportingTokens,
securityHeader.SignedEndorsingSupportingTokens, securityHeader.SignedSupportingTokens, securityHeader.SecurityTokenAuthorizationPoliciesMapping);
base.OnIncomingMessageVerified(message);
}
}
}
// 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
- EmptyEnumerator.cs
- AdornerHitTestResult.cs
- SystemWebSectionGroup.cs
- SupportingTokenListenerFactory.cs
- MarkerProperties.cs
- XmlSchemaSubstitutionGroup.cs
- ManagementObject.cs
- PenThreadWorker.cs
- EastAsianLunisolarCalendar.cs
- ControlCachePolicy.cs
- GreenMethods.cs
- CodeTypeOfExpression.cs
- DatePickerAutomationPeer.cs
- SEHException.cs
- FrameworkTextComposition.cs
- CodeAttributeDeclaration.cs
- MultiTargetingUtil.cs
- BinaryObjectWriter.cs
- ICollection.cs
- ListenerElementsCollection.cs
- MenuEventArgs.cs
- DependentTransaction.cs
- ADMembershipUser.cs
- InputBuffer.cs
- ManifestResourceInfo.cs
- AnnotationDocumentPaginator.cs
- AssemblyName.cs
- State.cs
- HtmlWindowCollection.cs
- DependencyPropertyConverter.cs
- BasicViewGenerator.cs
- PcmConverter.cs
- VideoDrawing.cs
- XmlQueryTypeFactory.cs
- ResourceAttributes.cs
- XmlDataSourceView.cs
- MessageDesigner.cs
- PropertyRecord.cs
- XPathMessageFilterElementComparer.cs
- VBIdentifierNameEditor.cs
- ColorMatrix.cs
- TPLETWProvider.cs
- ToolStripDropDownMenu.cs
- CqlLexer.cs
- LayoutTableCell.cs
- PolicyException.cs
- ServiceElement.cs
- ProjectionCamera.cs
- TraceHwndHost.cs
- PointValueSerializer.cs
- OletxEnlistment.cs
- BindingContext.cs
- CompilationSection.cs
- SapiAttributeParser.cs
- JpegBitmapEncoder.cs
- QilInvokeEarlyBound.cs
- RelationshipEnd.cs
- controlskin.cs
- ClientSettingsProvider.cs
- AudioFileOut.cs
- LogLogRecord.cs
- WindowsFormsLinkLabel.cs
- RankException.cs
- WmiEventSink.cs
- DataBoundLiteralControl.cs
- XPathMessageFilterElement.cs
- PackagePartCollection.cs
- LocalBuilder.cs
- ProcessModule.cs
- QuaternionAnimationUsingKeyFrames.cs
- BoundsDrawingContextWalker.cs
- SiteOfOriginContainer.cs
- StatusBarItemAutomationPeer.cs
- CompletedAsyncResult.cs
- COMException.cs
- Empty.cs
- ElementHostAutomationPeer.cs
- _OverlappedAsyncResult.cs
- ToolStripRenderEventArgs.cs
- AudioDeviceOut.cs
- StrokeSerializer.cs
- InstanceContext.cs
- OdbcPermission.cs
- AttributeQuery.cs
- TreeViewHitTestInfo.cs
- SimpleNameService.cs
- AsyncStreamReader.cs
- CompiledRegexRunner.cs
- CodeMemberEvent.cs
- HealthMonitoringSectionHelper.cs
- BookmarkTable.cs
- Cursors.cs
- Serialization.cs
- CryptoKeySecurity.cs
- ImageSourceConverter.cs
- QueryTask.cs
- xmlNames.cs
- DataGridViewLayoutData.cs
- PermissionSetEnumerator.cs
- InvalidateEvent.cs