Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / NegotiationTokenProvider.cs / 1 / NegotiationTokenProvider.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Security { using System.IdentityModel.Claims; using System.ServiceModel; using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; using System.IdentityModel.Policy; using System.ServiceModel.Security.Tokens; using System.Security.Principal; using System.Security.Cryptography.X509Certificates; using System.Collections.Generic; using System.ServiceModel.Channels; using System.Net; using System.Globalization; using System.Diagnostics; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.ServiceModel.Diagnostics; using System.Xml; /* * This is the base class for all token providers that negotiate an SCT from * the target service. */ abstract class NegotiationTokenProvider: IssuanceTokenProviderBase where T : IssuanceTokenProviderState { IChannelFactory rstChannelFactory; bool requiresManualReplyAddressing; BindingContext issuanceBindingContext; MessageVersion messageVersion; protected NegotiationTokenProvider() : base() { } public BindingContext IssuerBindingContext { get { return this.issuanceBindingContext; } set { this.CommunicationObject.ThrowIfDisposedOrImmutable(); if (value == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value"); } this.issuanceBindingContext = value.Clone(); } } public override XmlDictionaryString RequestSecurityTokenAction { get { return this.StandardsManager.TrustDriver.RequestSecurityTokenAction; } } public override XmlDictionaryString RequestSecurityTokenResponseAction { get { return this.StandardsManager.TrustDriver.RequestSecurityTokenResponseAction; } } protected override MessageVersion MessageVersion { get { return this.messageVersion; } } protected override bool RequiresManualReplyAddressing { get { ThrowIfCreated(); return this.requiresManualReplyAddressing; } } public override void OnClose(TimeSpan timeout) { TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); if (this.rstChannelFactory != null) { this.rstChannelFactory.Close(timeout); this.rstChannelFactory = null; } base.OnClose(timeoutHelper.RemainingTime()); } public override void OnAbort() { if (this.rstChannelFactory != null) { this.rstChannelFactory.Abort(); this.rstChannelFactory = null; } base.OnAbort(); } public override void OnOpen(TimeSpan timeout) { if (this.IssuerBindingContext == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.IssuerBuildContextNotSet, this.GetType()))); } TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); this.SetupRstChannelFactory(); this.rstChannelFactory.Open(timeout); base.OnOpen(timeoutHelper.RemainingTime()); } protected abstract IChannelFactory GetNegotiationChannelFactory(IChannelFactory transportChannelFactory, ChannelBuilder channelBuilder); void SetupRstChannelFactory() { IChannelFactory innerChannelFactory = null; ChannelBuilder channelBuilder = new ChannelBuilder(this.IssuerBindingContext.Clone(), true); // if the underlying transport does not support request/reply, wrap it inside // a service channel factory. if (channelBuilder.CanBuildChannelFactory ()) { innerChannelFactory = channelBuilder.BuildChannelFactory (); this.requiresManualReplyAddressing = true; } else { ClientRuntime clientRuntime = new ClientRuntime("RequestSecurityTokenContract", NamingHelper.DefaultNamespace); clientRuntime.ValidateMustUnderstand = false; ServiceChannelFactory serviceChannelFactory = ServiceChannelFactory.BuildChannelFactory(channelBuilder, clientRuntime); serviceChannelFactory.ClientRuntime.UseSynchronizationContext = false; serviceChannelFactory.ClientRuntime.AddTransactionFlowProperties = false; ClientOperation rstOperation = new ClientOperation(serviceChannelFactory.ClientRuntime, "RequestSecurityToken", this.RequestSecurityTokenAction.Value); rstOperation.Formatter = MessageOperationFormatter.Instance; serviceChannelFactory.ClientRuntime.Operations.Add(rstOperation); if (this.IsMultiLegNegotiation) { ClientOperation rstrOperation = new ClientOperation(serviceChannelFactory.ClientRuntime, "RequestSecurityTokenResponse", this.RequestSecurityTokenResponseAction.Value); rstrOperation.Formatter = MessageOperationFormatter.Instance; serviceChannelFactory.ClientRuntime.Operations.Add(rstrOperation); } // service channel automatically adds reply headers this.requiresManualReplyAddressing = false; innerChannelFactory = new SecuritySessionSecurityTokenProvider.RequestChannelFactory(serviceChannelFactory); } this.rstChannelFactory = GetNegotiationChannelFactory(innerChannelFactory, channelBuilder); this.messageVersion = channelBuilder.Binding.MessageVersion; } // negotiation message processing overrides protected override bool WillInitializeChannelFactoriesCompleteSynchronously(EndpointAddress target) { return true; } protected override void InitializeChannelFactories(EndpointAddress target, TimeSpan timeout) { } protected override IAsyncResult BeginInitializeChannelFactories(EndpointAddress target, TimeSpan timeout, AsyncCallback callback, object state) { return new CompletedAsyncResult(callback, state); } protected override void EndInitializeChannelFactories(IAsyncResult result) { CompletedAsyncResult.End(result); } protected override IRequestChannel CreateClientChannel(EndpointAddress target, Uri via) { if (via != null) { return this.rstChannelFactory.CreateChannel(target, via); } else { return this.rstChannelFactory.CreateChannel(target); } } } } // 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
- EnumerableRowCollection.cs
- PositiveTimeSpanValidatorAttribute.cs
- EdgeProfileValidation.cs
- DefaultBindingPropertyAttribute.cs
- CallbackHandler.cs
- ImageAutomationPeer.cs
- ICspAsymmetricAlgorithm.cs
- EmptyCollection.cs
- Win32MouseDevice.cs
- DrawingVisualDrawingContext.cs
- XMLSchema.cs
- SortedList.cs
- LinqMaximalSubtreeNominator.cs
- VarRefManager.cs
- SchemaNames.cs
- CharAnimationBase.cs
- InvalidTimeZoneException.cs
- PreservationFileReader.cs
- AxisAngleRotation3D.cs
- VarInfo.cs
- UnlockInstanceCommand.cs
- RelationshipConstraintValidator.cs
- ReferencedType.cs
- DashStyle.cs
- MDIClient.cs
- OdbcHandle.cs
- DBCSCodePageEncoding.cs
- CollectionView.cs
- StringComparer.cs
- ParseNumbers.cs
- ConfigErrorGlyph.cs
- OpCellTreeNode.cs
- CaseInsensitiveOrdinalStringComparer.cs
- WinEventHandler.cs
- ExitEventArgs.cs
- AudioException.cs
- PenThread.cs
- ServiceDesigner.cs
- BrushValueSerializer.cs
- TreeViewHitTestInfo.cs
- Fx.cs
- KeyPressEvent.cs
- IsolatedStorageFile.cs
- SecurityState.cs
- TextEditorMouse.cs
- HtmlControlPersistable.cs
- InvokeWebServiceDesigner.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- InnerItemCollectionView.cs
- ListViewGroup.cs
- IdentifierCreationService.cs
- Wizard.cs
- TableLayoutStyleCollection.cs
- ConstrainedDataObject.cs
- BinaryObjectInfo.cs
- CodeTypeDelegate.cs
- FrameworkElementFactoryMarkupObject.cs
- EndpointFilterProvider.cs
- InputScopeNameConverter.cs
- Environment.cs
- SqlUtils.cs
- TextBox.cs
- IntellisenseTextBox.cs
- returneventsaver.cs
- AsymmetricAlgorithm.cs
- BitmapMetadata.cs
- InfoCardProofToken.cs
- updatecommandorderer.cs
- PageRouteHandler.cs
- InboundActivityHelper.cs
- FixedSOMTableRow.cs
- XmlWriterDelegator.cs
- SymbolType.cs
- StringReader.cs
- EventProviderWriter.cs
- QuaternionAnimationUsingKeyFrames.cs
- CategoryNameCollection.cs
- OperationCanceledException.cs
- CompilerWrapper.cs
- SqlUDTStorage.cs
- EnvelopedSignatureTransform.cs
- SynchronizationContext.cs
- EdmRelationshipRoleAttribute.cs
- DbExpressionBuilder.cs
- DelegateBodyWriter.cs
- ContentIterators.cs
- ConfigurationManagerInternalFactory.cs
- LoginName.cs
- EmptyQuery.cs
- ClientProtocol.cs
- DataGridViewRowPrePaintEventArgs.cs
- BoolLiteral.cs
- InvalidCommandTreeException.cs
- HttpConfigurationSystem.cs
- UnhandledExceptionEventArgs.cs
- NativeMethods.cs
- MemberAssignment.cs
- IntAverageAggregationOperator.cs
- FilteredDataSetHelper.cs
- WsdlServiceChannelBuilder.cs