| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- //-----------------------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace System.ServiceModel.Security.Tokens
- {
- using System.IdentityModel.Tokens;
- using System.ServiceModel.Channels;
- using System.IdentityModel.Selectors;
- using System.ServiceModel;
- using System.ServiceModel.Security;
-
- using System.Text;
- using System.Globalization;
- public class SecureConversationSecurityTokenParameters : SecurityTokenParameters
- {
- internal const bool defaultRequireCancellation = true;
- internal const bool defaultCanRenewSession = true;
- SecurityBindingElement bootstrapSecurityBindingElement;
- ChannelProtectionRequirements bootstrapProtectionRequirements;
- bool requireCancellation;
- bool canRenewSession = defaultCanRenewSession;
- BindingContext issuerBindingContext;
- protected SecureConversationSecurityTokenParameters(SecureConversationSecurityTokenParameters other)
- : base(other)
- {
- this.requireCancellation = other.requireCancellation;
- this.canRenewSession = other.canRenewSession;
- if (other.bootstrapSecurityBindingElement != null)
- this.bootstrapSecurityBindingElement = (SecurityBindingElement)other.bootstrapSecurityBindingElement.Clone();
- if (other.bootstrapProtectionRequirements != null)
- this.bootstrapProtectionRequirements = new ChannelProtectionRequirements(other.bootstrapProtectionRequirements);
- if (other.issuerBindingContext != null)
- this.issuerBindingContext = other.issuerBindingContext.Clone();
- }
- public SecureConversationSecurityTokenParameters()
- : this(null, defaultRequireCancellation, null)
- {
- // empty
- }
- public SecureConversationSecurityTokenParameters(SecurityBindingElement bootstrapSecurityBindingElement)
- : this(bootstrapSecurityBindingElement, defaultRequireCancellation, null)
- {
- // empty
- }
- public SecureConversationSecurityTokenParameters(SecurityBindingElement bootstrapSecurityBindingElement, bool requireCancellation)
- : this(bootstrapSecurityBindingElement, requireCancellation, true)
- {
- // empty
- }
- public SecureConversationSecurityTokenParameters(SecurityBindingElement bootstrapSecurityBindingElement, bool requireCancellation, bool canRenewSession)
- : this(bootstrapSecurityBindingElement, requireCancellation, canRenewSession, null)
- {
- // empty
- }
- public SecureConversationSecurityTokenParameters(SecurityBindingElement bootstrapSecurityBindingElement, bool requireCancellation, ChannelProtectionRequirements bootstrapProtectionRequirements)
- : this(bootstrapSecurityBindingElement, requireCancellation, defaultCanRenewSession, null)
- {
- // empty
- }
- public SecureConversationSecurityTokenParameters(SecurityBindingElement bootstrapSecurityBindingElement, bool requireCancellation, bool canRenewSession, ChannelProtectionRequirements bootstrapProtectionRequirements)
- : base()
- {
- this.bootstrapSecurityBindingElement = bootstrapSecurityBindingElement;
- this.canRenewSession = canRenewSession;
- if (bootstrapProtectionRequirements != null)
- this.bootstrapProtectionRequirements = new ChannelProtectionRequirements(bootstrapProtectionRequirements);
- else
- {
- this.bootstrapProtectionRequirements = new ChannelProtectionRequirements();
- this.bootstrapProtectionRequirements.IncomingEncryptionParts.AddParts(new MessagePartSpecification(true));
- this.bootstrapProtectionRequirements.IncomingSignatureParts.AddParts(new MessagePartSpecification(true));
- this.bootstrapProtectionRequirements.OutgoingEncryptionParts.AddParts(new MessagePartSpecification(true));
- this.bootstrapProtectionRequirements.OutgoingSignatureParts.AddParts(new MessagePartSpecification(true));
- }
- this.requireCancellation = requireCancellation;
- }
- internal protected override bool HasAsymmetricKey { get { return false; } }
- public SecurityBindingElement BootstrapSecurityBindingElement
- {
- get
- {
- return this.bootstrapSecurityBindingElement;
- }
- set
- {
- this.bootstrapSecurityBindingElement = value;
- }
- }
- public ChannelProtectionRequirements BootstrapProtectionRequirements
- {
- get
- {
- return this.bootstrapProtectionRequirements;
- }
- }
- internal BindingContext IssuerBindingContext
- {
- get
- {
- return this.issuerBindingContext;
- }
- set
- {
- if (value != null)
- {
- value = value.Clone();
- }
- this.issuerBindingContext = value;
- }
- }
- ISecurityCapabilities BootstrapSecurityCapabilities
- {
- get
- {
- return this.bootstrapSecurityBindingElement.GetIndividualProperty<ISecurityCapabilities>();
- }
- }
- public bool RequireCancellation
- {
- get
- {
- return this.requireCancellation;
- }
- set
- {
- this.requireCancellation = value;
- }
- }
- public bool CanRenewSession
- {
- get
- {
- return this.canRenewSession;
- }
- set
- {
- this.canRenewSession = value;
- }
- }
- internal protected override bool SupportsClientAuthentication
- {
- get
- {
- return this.BootstrapSecurityCapabilities == null ? false : this.BootstrapSecurityCapabilities.SupportsClientAuthentication;
- }
- }
- internal protected override bool SupportsServerAuthentication
- {
- get
- {
- return this.BootstrapSecurityCapabilities == null ? false : this.BootstrapSecurityCapabilities.SupportsServerAuthentication;
- }
- }
- internal protected override bool SupportsClientWindowsIdentity
- {
- get
- {
- return this.BootstrapSecurityCapabilities == null ? false : this.BootstrapSecurityCapabilities.SupportsClientWindowsIdentity;
- }
- }
- protected override SecurityTokenParameters CloneCore()
- {
- return new SecureConversationSecurityTokenParameters(this);
- }
- internal protected override SecurityKeyIdentifierClause CreateKeyIdentifierClause(SecurityToken token, SecurityTokenReferenceStyle referenceStyle)
- {
- if (token is GenericXmlSecurityToken)
- return base.CreateGenericXmlTokenKeyIdentifierClause(token, referenceStyle);
- else
- return this.CreateKeyIdentifierClause<SecurityContextKeyIdentifierClause, LocalIdKeyIdentifierClause>(token, referenceStyle);
- }
- protected internal override void InitializeSecurityTokenRequirement(SecurityTokenRequirement requirement)
- {
- requirement.TokenType = ServiceModelSecurityTokenTypes.SecureConversation;
- requirement.KeyType = SecurityKeyType.SymmetricKey;
- requirement.RequireCryptographicToken = true;
- requirement.Properties[ServiceModelSecurityTokenRequirement.SupportSecurityContextCancellationProperty] = this.RequireCancellation;
- requirement.Properties[ServiceModelSecurityTokenRequirement.SecureConversationSecurityBindingElementProperty] = this.BootstrapSecurityBindingElement;
- requirement.Properties[ServiceModelSecurityTokenRequirement.IssuerBindingContextProperty] = this.IssuerBindingContext.Clone();
- requirement.Properties[ServiceModelSecurityTokenRequirement.IssuedSecurityTokenParametersProperty] = this.Clone();
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.AppendLine(base.ToString());
- sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "RequireCancellation: {0}", this.requireCancellation.ToString()));
- if (this.bootstrapSecurityBindingElement == null)
- {
- sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "BootstrapSecurityBindingElement: null"));
- }
- else
- {
- sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "BootstrapSecurityBindingElement:"));
- sb.AppendLine(" " + this.BootstrapSecurityBindingElement.ToString().Trim().Replace("\n", "\n "));
- }
- return sb.ToString().Trim();
- }
- }
- }
|