You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			206 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //-----------------------------------------------------------------------------
 | |
| // Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| //-----------------------------------------------------------------------------
 | |
| 
 | |
| 
 | |
| namespace System.ServiceModel.Security.Tokens
 | |
| {
 | |
|     using System.ServiceModel.Security;
 | |
|     using System.ServiceModel.Channels;
 | |
|     using System.ServiceModel;
 | |
|     using System.Text;
 | |
|     using System.Globalization;
 | |
|     using System.IdentityModel.Selectors;
 | |
|     using System.IdentityModel.Tokens;
 | |
| 
 | |
|     public abstract class SecurityTokenParameters
 | |
|     {
 | |
|         internal const SecurityTokenInclusionMode defaultInclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient;
 | |
|         internal const SecurityTokenReferenceStyle defaultReferenceStyle = SecurityTokenReferenceStyle.Internal;
 | |
|         internal const bool defaultRequireDerivedKeys = true;
 | |
| 
 | |
|         SecurityTokenInclusionMode inclusionMode = defaultInclusionMode;
 | |
|         SecurityTokenReferenceStyle referenceStyle = defaultReferenceStyle;
 | |
|         bool requireDerivedKeys = defaultRequireDerivedKeys;
 | |
| 
 | |
|         protected SecurityTokenParameters(SecurityTokenParameters other)
 | |
|         {
 | |
|             if (other == null)
 | |
|                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("other");
 | |
| 
 | |
|             this.requireDerivedKeys = other.requireDerivedKeys;
 | |
|             this.inclusionMode = other.inclusionMode;
 | |
|             this.referenceStyle = other.referenceStyle;
 | |
|         }
 | |
| 
 | |
|         protected SecurityTokenParameters()
 | |
|         {
 | |
|             // empty
 | |
|         }
 | |
| 
 | |
|         internal protected abstract bool HasAsymmetricKey { get; }
 | |
| 
 | |
|         public SecurityTokenInclusionMode InclusionMode
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return this.inclusionMode;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 SecurityTokenInclusionModeHelper.Validate(value);
 | |
|                 this.inclusionMode = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public SecurityTokenReferenceStyle ReferenceStyle
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return this.referenceStyle;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 TokenReferenceStyleHelper.Validate(value);
 | |
|                 this.referenceStyle = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public bool RequireDerivedKeys
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return this.requireDerivedKeys;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 this.requireDerivedKeys = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         internal protected abstract bool SupportsClientAuthentication { get; }
 | |
|         internal protected abstract bool SupportsServerAuthentication { get; }
 | |
|         internal protected abstract bool SupportsClientWindowsIdentity { get; }
 | |
| 
 | |
|         public SecurityTokenParameters Clone()
 | |
|         {
 | |
|             SecurityTokenParameters result = this.CloneCore();
 | |
| 
 | |
|             if (result == null)
 | |
|                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.SecurityTokenParametersCloneInvalidResult, this.GetType().ToString())));
 | |
| 
 | |
|             return result;
 | |
|         }
 | |
| 
 | |
|         protected abstract SecurityTokenParameters CloneCore();
 | |
| 
 | |
|         internal protected abstract SecurityKeyIdentifierClause CreateKeyIdentifierClause(SecurityToken token, SecurityTokenReferenceStyle referenceStyle);
 | |
| 
 | |
|         internal protected abstract void InitializeSecurityTokenRequirement(SecurityTokenRequirement requirement);
 | |
| 
 | |
|         internal SecurityKeyIdentifierClause CreateKeyIdentifierClause<TExternalClause, TInternalClause>(SecurityToken token, SecurityTokenReferenceStyle referenceStyle)
 | |
|             where TExternalClause : SecurityKeyIdentifierClause
 | |
|             where TInternalClause : SecurityKeyIdentifierClause
 | |
|         {
 | |
|             if (token == null)
 | |
|                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("token");
 | |
| 
 | |
|             SecurityKeyIdentifierClause result;
 | |
| 
 | |
|             switch (referenceStyle)
 | |
|             {
 | |
|                 default:
 | |
|                     throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(
 | |
|                         SR.GetString(SR.TokenDoesNotSupportKeyIdentifierClauseCreation, token.GetType().Name, referenceStyle)));
 | |
|                 case SecurityTokenReferenceStyle.External:
 | |
|                     result = token.CreateKeyIdentifierClause<TExternalClause>();
 | |
|                     break;
 | |
|                 case SecurityTokenReferenceStyle.Internal:
 | |
|                     result = token.CreateKeyIdentifierClause<TInternalClause>();
 | |
|                     break;
 | |
|             }
 | |
| 
 | |
|             return result;
 | |
|         }
 | |
| 
 | |
|         internal SecurityKeyIdentifierClause CreateGenericXmlTokenKeyIdentifierClause(SecurityToken token, SecurityTokenReferenceStyle referenceStyle)
 | |
|         {
 | |
|             GenericXmlSecurityToken xmlToken = token as GenericXmlSecurityToken;
 | |
|             if (xmlToken != null)
 | |
|             {
 | |
|                 if (referenceStyle == SecurityTokenReferenceStyle.Internal && xmlToken.InternalTokenReference != null)
 | |
|                     return xmlToken.InternalTokenReference;
 | |
| 
 | |
|                 if (referenceStyle == SecurityTokenReferenceStyle.External && xmlToken.ExternalTokenReference != null)
 | |
|                     return xmlToken.ExternalTokenReference;
 | |
|             }
 | |
| 
 | |
|             throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.GetString(SR.UnableToCreateTokenReference)));
 | |
|         }
 | |
| 
 | |
|         internal protected virtual bool MatchesKeyIdentifierClause(SecurityToken token, SecurityKeyIdentifierClause keyIdentifierClause, SecurityTokenReferenceStyle referenceStyle)
 | |
|         {
 | |
|             if (token == null)
 | |
|                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("token");
 | |
| 
 | |
|             if (token is GenericXmlSecurityToken)
 | |
|             {
 | |
|                 return MatchesGenericXmlTokenKeyIdentifierClause(token, keyIdentifierClause, referenceStyle);
 | |
|             }
 | |
| 
 | |
|             bool result;
 | |
| 
 | |
|             switch (referenceStyle)
 | |
|             {
 | |
|                 default:
 | |
|                     throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(
 | |
|                         SR.GetString(SR.TokenDoesNotSupportKeyIdentifierClauseCreation, token.GetType().Name, referenceStyle)));
 | |
|                 case SecurityTokenReferenceStyle.External:
 | |
|                     if (keyIdentifierClause is LocalIdKeyIdentifierClause)
 | |
|                         result = false;
 | |
|                     else
 | |
|                         result = token.MatchesKeyIdentifierClause(keyIdentifierClause);
 | |
|                     break;
 | |
|                 case SecurityTokenReferenceStyle.Internal:
 | |
|                     result = token.MatchesKeyIdentifierClause(keyIdentifierClause);
 | |
|                     break;
 | |
|             }
 | |
| 
 | |
|             return result;
 | |
|         }
 | |
| 
 | |
|         internal bool MatchesGenericXmlTokenKeyIdentifierClause(SecurityToken token, SecurityKeyIdentifierClause keyIdentifierClause, SecurityTokenReferenceStyle referenceStyle)
 | |
|         {
 | |
|             if (token == null)
 | |
|                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("token");
 | |
| 
 | |
|             bool result;
 | |
| 
 | |
|             GenericXmlSecurityToken xmlToken = token as GenericXmlSecurityToken;
 | |
| 
 | |
|             if (xmlToken == null)
 | |
|                 result = false;
 | |
|             else if (referenceStyle == SecurityTokenReferenceStyle.External && xmlToken.ExternalTokenReference != null)
 | |
|                 result = xmlToken.ExternalTokenReference.Matches(keyIdentifierClause);
 | |
|             else if (referenceStyle == SecurityTokenReferenceStyle.Internal)
 | |
|                 result = xmlToken.MatchesKeyIdentifierClause(keyIdentifierClause);
 | |
|             else
 | |
|                 result = false;
 | |
| 
 | |
|             return result;
 | |
|         }
 | |
| 
 | |
|         public override string ToString()
 | |
|         {
 | |
|             StringBuilder sb = new StringBuilder();
 | |
| 
 | |
|             sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "{0}:", this.GetType().ToString()));
 | |
|             sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "InclusionMode: {0}", this.inclusionMode.ToString()));
 | |
|             sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "ReferenceStyle: {0}", this.referenceStyle.ToString()));
 | |
|             sb.Append(String.Format(CultureInfo.InvariantCulture, "RequireDerivedKeys: {0}", this.requireDerivedKeys.ToString()));
 | |
| 
 | |
|             return sb.ToString();
 | |
|         }
 | |
|     }
 | |
| }
 |