Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / AsymmetricSecurityProtocolFactory.cs / 1 / AsymmetricSecurityProtocolFactory.cs
//---------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Security { using System.Collections.ObjectModel; using System.ServiceModel; using System.ServiceModel.Description; using System.IdentityModel.Selectors; using System.IdentityModel.Tokens; using System.ServiceModel.Channels; using System.ServiceModel.Security.Tokens; class AsymmetricSecurityProtocolFactory : MessageSecurityProtocolFactory { SecurityTokenParameters cryptoTokenParameters; SecurityTokenParameters asymmetricTokenParameters; SecurityTokenProvider recipientAsymmetricTokenProvider; ReadOnlyCollectionrecipientOutOfBandTokenResolverList; SecurityTokenAuthenticator recipientCryptoTokenAuthenticator; bool allowSerializedSigningTokenOnReply; public AsymmetricSecurityProtocolFactory() : base() { } internal AsymmetricSecurityProtocolFactory(AsymmetricSecurityProtocolFactory factory) : base(factory) { this.allowSerializedSigningTokenOnReply = factory.allowSerializedSigningTokenOnReply; } public bool AllowSerializedSigningTokenOnReply { get { return this.allowSerializedSigningTokenOnReply; } set { ThrowIfImmutable(); this.allowSerializedSigningTokenOnReply = value; } } public SecurityTokenParameters AsymmetricTokenParameters { get { return this.asymmetricTokenParameters; } set { ThrowIfImmutable(); this.asymmetricTokenParameters = value; } } public SecurityTokenProvider RecipientAsymmetricTokenProvider { get { this.CommunicationObject.ThrowIfNotOpened(); return this.recipientAsymmetricTokenProvider; } } public SecurityTokenAuthenticator RecipientCryptoTokenAuthenticator { get { this.CommunicationObject.ThrowIfNotOpened(); return this.recipientCryptoTokenAuthenticator; } } public ReadOnlyCollection RecipientOutOfBandTokenResolverList { get { this.CommunicationObject.ThrowIfNotOpened(); return this.recipientOutOfBandTokenResolverList; } } public SecurityTokenParameters CryptoTokenParameters { get { return this.cryptoTokenParameters; } set { ThrowIfImmutable(); this.cryptoTokenParameters = value; } } bool RequiresAsymmetricTokenProviderForForwardDirection { get { return ((this.ActAsInitiator && this.ApplyConfidentiality) || (!this.ActAsInitiator && this.RequireConfidentiality)); } } bool RequiresAsymmetricTokenProviderForReturnDirection { get { return ((this.ActAsInitiator && this.RequireIntegrity) || (!this.ActAsInitiator && this.ApplyIntegrity)); } } public override EndpointIdentity GetIdentityOfSelf() { if (this.SecurityTokenManager is IEndpointIdentityProvider && this.AsymmetricTokenParameters != null) { SecurityTokenRequirement requirement = CreateRecipientSecurityTokenRequirement(); this.AsymmetricTokenParameters.InitializeSecurityTokenRequirement(requirement); return ((IEndpointIdentityProvider)this.SecurityTokenManager).GetIdentityOfSelf(requirement); } else { return base.GetIdentityOfSelf(); } } public override T GetProperty () { if (typeof(T) == typeof(Collection )) { Collection result = base.GetProperty >(); if (this.recipientCryptoTokenAuthenticator is ISecurityContextSecurityTokenCacheProvider) { result.Add(((ISecurityContextSecurityTokenCacheProvider)this.recipientCryptoTokenAuthenticator).TokenCache); } return (T) (object) (result); } else { return base.GetProperty (); } } public override void OnClose(TimeSpan timeout) { TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); if (!this.ActAsInitiator) { if (this.recipientAsymmetricTokenProvider != null) { SecurityUtils.CloseTokenProviderIfRequired(this.recipientAsymmetricTokenProvider, timeoutHelper.RemainingTime()); } if (this.recipientCryptoTokenAuthenticator != null) { SecurityUtils.CloseTokenAuthenticatorIfRequired(this.recipientCryptoTokenAuthenticator, timeoutHelper.RemainingTime()); } } base.OnClose(timeoutHelper.RemainingTime()); } public override void OnAbort() { if (!this.ActAsInitiator) { if (this.recipientAsymmetricTokenProvider != null) { SecurityUtils.AbortTokenProviderIfRequired(this.recipientAsymmetricTokenProvider); } if (this.recipientCryptoTokenAuthenticator != null) { SecurityUtils.AbortTokenAuthenticatorIfRequired(this.recipientCryptoTokenAuthenticator); } } base.OnAbort(); } protected override SecurityProtocol OnCreateSecurityProtocol(EndpointAddress target, Uri via, object listenerSecurityState, TimeSpan timeout) { return new AsymmetricSecurityProtocol(this, target, via); } public override void OnOpen(TimeSpan timeout) { TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); base.OnOpen(timeoutHelper.RemainingTime()); // open forward direction if (this.ActAsInitiator) { if (this.ApplyIntegrity) { if (this.CryptoTokenParameters == null) { OnPropertySettingsError("CryptoTokenParameters", true); } if (this.CryptoTokenParameters.RequireDerivedKeys) { this.ExpectKeyDerivation = true; } } } else { if (this.CryptoTokenParameters == null) { OnPropertySettingsError("CryptoTokenParameters", true); } if (this.CryptoTokenParameters.RequireDerivedKeys) { this.ExpectKeyDerivation = true; } SecurityTokenResolver resolver = null; if (this.RequireIntegrity) { RecipientServiceModelSecurityTokenRequirement requirement = CreateRecipientSecurityTokenRequirement(); this.CryptoTokenParameters.InitializeSecurityTokenRequirement(requirement); requirement.KeyUsage = SecurityKeyUsage.Signature; requirement.Properties[ServiceModelSecurityTokenRequirement.MessageDirectionProperty] = MessageDirection.Input; this.recipientCryptoTokenAuthenticator = this.SecurityTokenManager.CreateSecurityTokenAuthenticator(requirement, out resolver); Open("RecipientCryptoTokenAuthenticator", true, this.recipientCryptoTokenAuthenticator, timeoutHelper.RemainingTime()); } if (resolver != null) { Collection tmp = new Collection (); tmp.Add(resolver); this.recipientOutOfBandTokenResolverList = new ReadOnlyCollection (tmp); } else { this.recipientOutOfBandTokenResolverList = EmptyReadOnlyCollection .Instance; } } if (this.RequiresAsymmetricTokenProviderForForwardDirection || this.RequiresAsymmetricTokenProviderForReturnDirection) { if (this.AsymmetricTokenParameters == null) { OnPropertySettingsError("AsymmetricTokenParameters", this.RequiresAsymmetricTokenProviderForForwardDirection); } else if (this.AsymmetricTokenParameters.RequireDerivedKeys) { this.ExpectKeyDerivation = true; } if (!this.ActAsInitiator) { RecipientServiceModelSecurityTokenRequirement requirement = CreateRecipientSecurityTokenRequirement(); this.AsymmetricTokenParameters.InitializeSecurityTokenRequirement(requirement); requirement.KeyUsage = (this.RequiresAsymmetricTokenProviderForForwardDirection) ? SecurityKeyUsage.Exchange : SecurityKeyUsage.Signature; requirement.Properties[ServiceModelSecurityTokenRequirement.MessageDirectionProperty] = (this.RequiresAsymmetricTokenProviderForForwardDirection) ? MessageDirection.Input : MessageDirection.Output; this.recipientAsymmetricTokenProvider = this.SecurityTokenManager.CreateSecurityTokenProvider(requirement); Open("RecipientAsymmetricTokenProvider", this.RequiresAsymmetricTokenProviderForForwardDirection, this.recipientAsymmetricTokenProvider, timeoutHelper.RemainingTime()); } } if (this.ActAsInitiator && this.AllowSerializedSigningTokenOnReply && this.IdentityVerifier == null) { OnPropertySettingsError("IdentityVerifier", false); } } } } // 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
- ProtocolsConfiguration.cs
- StubHelpers.cs
- NameValuePair.cs
- LinearKeyFrames.cs
- ColorAnimationUsingKeyFrames.cs
- HtmlSelect.cs
- SharedDp.cs
- NativeMethods.cs
- FixedPageStructure.cs
- CustomTypeDescriptor.cs
- CodeSubDirectory.cs
- ScrollableControlDesigner.cs
- TreeView.cs
- ParserStreamGeometryContext.cs
- SubclassTypeValidator.cs
- IMembershipProvider.cs
- Propagator.JoinPropagator.cs
- CompilerCollection.cs
- AsymmetricSignatureFormatter.cs
- DateTimeEditor.cs
- IERequestCache.cs
- SoapAttributes.cs
- WorkflowApplicationCompletedException.cs
- SettingsPropertyNotFoundException.cs
- DiscreteKeyFrames.cs
- ConnectionProviderAttribute.cs
- Random.cs
- MimeFormImporter.cs
- ImageFormat.cs
- HttpServerVarsCollection.cs
- ClientRolePrincipal.cs
- Activity.cs
- Vector.cs
- ActivityDesignerAccessibleObject.cs
- XsdDuration.cs
- SignatureDescription.cs
- DataAdapter.cs
- VisualStyleTypesAndProperties.cs
- TimersDescriptionAttribute.cs
- DesignerValidationSummaryAdapter.cs
- CredentialCache.cs
- IriParsingElement.cs
- InputLanguageCollection.cs
- DataGridHeaderBorder.cs
- documentsequencetextpointer.cs
- NavigateEvent.cs
- validationstate.cs
- DataSourceExpression.cs
- BlurBitmapEffect.cs
- TableCellAutomationPeer.cs
- CounterCreationDataCollection.cs
- ChoiceConverter.cs
- RepeatButton.cs
- CharUnicodeInfo.cs
- XmlNodeChangedEventArgs.cs
- bidPrivateBase.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- Viewport2DVisual3D.cs
- InstanceBehavior.cs
- UnderstoodHeaders.cs
- AmbientProperties.cs
- CqlParserHelpers.cs
- ComponentDispatcherThread.cs
- ScopedKnownTypes.cs
- Registry.cs
- ProxyDataContractResolver.cs
- ConfigurationSectionGroupCollection.cs
- CodePrimitiveExpression.cs
- OdbcStatementHandle.cs
- ThreadAbortException.cs
- CryptoApi.cs
- PointConverter.cs
- LinkLabelLinkClickedEvent.cs
- ProfileProvider.cs
- Html32TextWriter.cs
- ScaleTransform3D.cs
- XmlSchemaType.cs
- PassportAuthentication.cs
- EntityDataSourceStatementEditor.cs
- XmlWhitespace.cs
- StringSorter.cs
- fixedPageContentExtractor.cs
- DataGridViewRow.cs
- HostingEnvironmentException.cs
- IndicCharClassifier.cs
- URLMembershipCondition.cs
- ButtonChrome.cs
- SpeechRecognitionEngine.cs
- ByteConverter.cs
- XmlILModule.cs
- RelationshipManager.cs
- ObjectReferenceStack.cs
- TableAdapterManagerNameHandler.cs
- CodeMethodMap.cs
- VScrollBar.cs
- Html32TextWriter.cs
- ClassHandlersStore.cs
- TraceHelpers.cs
- Control.cs
- RealProxy.cs