Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / SecurityMessageProperty.cs / 1 / SecurityMessageProperty.cs
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
namespace System.ServiceModel.Security
{
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.IdentityModel.Claims;
using System.IdentityModel.Policy;
using System.IdentityModel.Tokens;
using System.ServiceModel.Security.Tokens;
using System.Net.Security;
public class SecurityMessageProperty : IMessageProperty, IDisposable
{
// This is the list of outgoing supporting tokens
Collection outgoingSupportingTokens;
Collection incomingSupportingTokens;
SecurityTokenSpecification transportToken;
SecurityTokenSpecification protectionToken;
SecurityTokenSpecification initiatorToken;
SecurityTokenSpecification recipientToken;
ServiceSecurityContext securityContext;
ReadOnlyCollection externalAuthorizationPolicies;
string senderIdPrefix = "_";
bool disposed = false;
public SecurityMessageProperty()
{
this.securityContext = ServiceSecurityContext.Anonymous;
}
public ServiceSecurityContext ServiceSecurityContext
{
get
{
ThrowIfDisposed();
return this.securityContext;
}
set
{
ThrowIfDisposed();
this.securityContext = value;
}
}
public ReadOnlyCollection ExternalAuthorizationPolicies
{
get
{
return this.externalAuthorizationPolicies;
}
set
{
this.externalAuthorizationPolicies = value;
}
}
public SecurityTokenSpecification ProtectionToken
{
get
{
ThrowIfDisposed();
return this.protectionToken;
}
set
{
ThrowIfDisposed();
this.protectionToken = value;
}
}
public SecurityTokenSpecification InitiatorToken
{
get
{
ThrowIfDisposed();
return this.initiatorToken;
}
set
{
ThrowIfDisposed();
this.initiatorToken = value;
}
}
public SecurityTokenSpecification RecipientToken
{
get
{
ThrowIfDisposed();
return this.recipientToken;
}
set
{
ThrowIfDisposed();
this.recipientToken = value;
}
}
public SecurityTokenSpecification TransportToken
{
get
{
ThrowIfDisposed();
return this.transportToken;
}
set
{
ThrowIfDisposed();
this.transportToken = value;
}
}
public string SenderIdPrefix
{
get
{
return this.senderIdPrefix;
}
set
{
XmlHelper.ValidateIdPrefix(value);
this.senderIdPrefix = value;
}
}
public bool HasIncomingSupportingTokens
{
get
{
ThrowIfDisposed();
return ((this.incomingSupportingTokens != null) && (this.incomingSupportingTokens.Count > 0));
}
}
public Collection IncomingSupportingTokens
{
get
{
ThrowIfDisposed();
if (this.incomingSupportingTokens == null)
{
this.incomingSupportingTokens = new Collection();
}
return this.incomingSupportingTokens;
}
}
internal Collection OutgoingSupportingTokens
{
get
{
if (this.outgoingSupportingTokens == null)
{
this.outgoingSupportingTokens = new Collection();
}
return this.outgoingSupportingTokens;
}
}
internal bool HasOutgoingSupportingTokens
{
get
{
return ((this.outgoingSupportingTokens != null) && (this.outgoingSupportingTokens.Count > 0));
}
}
public IMessageProperty CreateCopy()
{
ThrowIfDisposed();
SecurityMessageProperty result = new SecurityMessageProperty();
if (this.HasOutgoingSupportingTokens)
{
for (int i = 0; i < this.outgoingSupportingTokens.Count; ++i)
{
result.OutgoingSupportingTokens.Add(this.outgoingSupportingTokens[i]);
}
}
if (this.HasIncomingSupportingTokens)
{
for (int i = 0; i < this.incomingSupportingTokens.Count; ++i)
{
result.IncomingSupportingTokens.Add(this.incomingSupportingTokens[i]);
}
}
result.securityContext = this.securityContext;
result.externalAuthorizationPolicies = this.externalAuthorizationPolicies;
result.senderIdPrefix = this.senderIdPrefix;
result.protectionToken = this.protectionToken;
result.initiatorToken = this.initiatorToken;
result.recipientToken = this.recipientToken;
result.transportToken = this.transportToken;
return result;
}
public static SecurityMessageProperty GetOrCreate(Message message)
{
if (message == null)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message");
SecurityMessageProperty result = null;
if (message.Properties != null)
result = message.Properties.Security;
if (result == null)
{
result = new SecurityMessageProperty();
message.Properties.Security = result;
}
return result;
}
void AddAuthorizationPolicies(SecurityTokenSpecification spec, Collection policies)
{
if (spec != null && spec.SecurityTokenPolicies != null && spec.SecurityTokenPolicies.Count > 0)
{
for (int i = 0; i < spec.SecurityTokenPolicies.Count; ++i)
{
policies.Add(spec.SecurityTokenPolicies[i]);
}
}
}
internal ReadOnlyCollection GetInitiatorTokenAuthorizationPolicies()
{
return GetInitiatorTokenAuthorizationPolicies(true);
}
internal ReadOnlyCollection GetInitiatorTokenAuthorizationPolicies(bool includeTransportToken)
{
return GetInitiatorTokenAuthorizationPolicies(includeTransportToken, null);
}
internal ReadOnlyCollection GetInitiatorTokenAuthorizationPolicies(bool includeTransportToken, SecurityContextSecurityToken supportingSessionTokenToExclude)
{
// fast path
if (!this.HasIncomingSupportingTokens)
{
if (this.transportToken != null && this.initiatorToken == null && this.protectionToken == null)
{
if (includeTransportToken && this.transportToken.SecurityTokenPolicies != null)
{
return this.transportToken.SecurityTokenPolicies;
}
else
{
return EmptyReadOnlyCollection.Instance;
}
}
else if (this.transportToken == null && this.initiatorToken != null && this.protectionToken == null)
{
return this.initiatorToken.SecurityTokenPolicies ?? EmptyReadOnlyCollection.Instance;
}
else if (this.transportToken == null && this.initiatorToken == null && this.protectionToken != null)
{
return this.protectionToken.SecurityTokenPolicies ?? EmptyReadOnlyCollection.Instance;
}
}
Collection policies = new Collection();
if (includeTransportToken)
{
AddAuthorizationPolicies(this.transportToken, policies);
}
AddAuthorizationPolicies(this.initiatorToken, policies);
AddAuthorizationPolicies(this.protectionToken, policies);
if (this.HasIncomingSupportingTokens)
{
for (int i = 0; i < this.incomingSupportingTokens.Count; ++i)
{
if (supportingSessionTokenToExclude != null)
{
SecurityContextSecurityToken sct = this.incomingSupportingTokens[i].SecurityToken as SecurityContextSecurityToken;
if (sct != null && sct.ContextId == supportingSessionTokenToExclude.ContextId)
{
continue;
}
}
SecurityTokenAttachmentMode attachmentMode = this.incomingSupportingTokens[i].SecurityTokenAttachmentMode;
// a safety net in case more attachment modes get added to the product without
// reviewing this code.
if (attachmentMode == SecurityTokenAttachmentMode.Endorsing
|| attachmentMode == SecurityTokenAttachmentMode.Signed
|| attachmentMode == SecurityTokenAttachmentMode.SignedEncrypted
|| attachmentMode == SecurityTokenAttachmentMode.SignedEndorsing)
{
AddAuthorizationPolicies(this.incomingSupportingTokens[i], policies);
}
}
}
return new ReadOnlyCollection(policies);
}
public void Dispose()
{
// do no-op for future V2
if (!this.disposed)
{
this.disposed = true;
}
}
void ThrowIfDisposed()
{
if (this.disposed)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ObjectDisposedException(this.GetType().FullName));
}
}
}
}
// 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
- dataobject.cs
- SvcMapFileSerializer.cs
- Int32KeyFrameCollection.cs
- ArraySubsetEnumerator.cs
- _UncName.cs
- XamlSerializationHelper.cs
- ToolStripPanelRenderEventArgs.cs
- Crc32.cs
- WebResponse.cs
- EntityDesignerDataSourceView.cs
- HTTPNotFoundHandler.cs
- SymbolEqualComparer.cs
- ConfigurationPropertyAttribute.cs
- panel.cs
- AssemblyBuilder.cs
- ConfigWriter.cs
- SoapClientMessage.cs
- InputLanguageCollection.cs
- Label.cs
- Rotation3DAnimation.cs
- AccessorTable.cs
- PassportAuthenticationModule.cs
- CacheEntry.cs
- CqlGenerator.cs
- WebScriptMetadataMessageEncodingBindingElement.cs
- WhitespaceRuleReader.cs
- PrintPreviewDialog.cs
- TemplatedMailWebEventProvider.cs
- CustomPeerResolverService.cs
- WindowsTab.cs
- EmptyImpersonationContext.cs
- ColumnResult.cs
- PersonalizationStateQuery.cs
- HwndStylusInputProvider.cs
- DbXmlEnabledProviderManifest.cs
- EventSetterHandlerConverter.cs
- ImageDrawing.cs
- SchemaExporter.cs
- XmlNode.cs
- ComplexObject.cs
- PointConverter.cs
- TransactionChannelFactory.cs
- IEnumerable.cs
- ListCollectionView.cs
- LocationReferenceValue.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- TableLayoutSettings.cs
- TypedReference.cs
- ObjectDataSourceMethodEditor.cs
- ResourcesChangeInfo.cs
- MimeMultiPart.cs
- Rect.cs
- ComponentManagerBroker.cs
- HttpModuleCollection.cs
- DataGridViewTopRowAccessibleObject.cs
- DBAsyncResult.cs
- ParameterCollection.cs
- StylusCaptureWithinProperty.cs
- CodeDOMProvider.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- CryptoConfig.cs
- DeviceContext.cs
- ToolStripPanel.cs
- NativeActivityMetadata.cs
- Int32.cs
- ListMarkerSourceInfo.cs
- MultiPageTextView.cs
- DesignTable.cs
- XmlLangPropertyAttribute.cs
- SecureStringHasher.cs
- TextSpan.cs
- MobileControl.cs
- LayoutTable.cs
- ComponentEvent.cs
- externdll.cs
- StrokeNodeEnumerator.cs
- SecurityDescriptor.cs
- PropertyPath.cs
- DocumentationServerProtocol.cs
- SessionParameter.cs
- DiscoveryDocumentSerializer.cs
- Trace.cs
- BindingExpressionUncommonField.cs
- ColorKeyFrameCollection.cs
- shaperfactoryquerycacheentry.cs
- DocumentGridPage.cs
- SimpleLine.cs
- PriorityItem.cs
- input.cs
- TreeViewDataItemAutomationPeer.cs
- InstanceOwner.cs
- Formatter.cs
- BaseInfoTable.cs
- contentDescriptor.cs
- SqlDataSourceTableQuery.cs
- Pointer.cs
- ProviderSettings.cs
- __Filters.cs
- ellipse.cs
- ObjectListFieldCollection.cs