SslSecurityTokenParameters.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. //-----------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //-----------------------------------------------------------------------------
  4. namespace System.ServiceModel.Security.Tokens
  5. {
  6. using System.IdentityModel.Selectors;
  7. using System.ServiceModel.Channels;
  8. using System.ServiceModel;
  9. using System.IdentityModel.Tokens;
  10. using System.ServiceModel.Security;
  11. using System.Text;
  12. using System.Globalization;
  13. public class SslSecurityTokenParameters : SecurityTokenParameters
  14. {
  15. internal const bool defaultRequireClientCertificate = false;
  16. internal const bool defaultRequireCancellation = false;
  17. bool requireCancellation = defaultRequireCancellation;
  18. bool requireClientCertificate;
  19. BindingContext issuerBindingContext;
  20. protected SslSecurityTokenParameters(SslSecurityTokenParameters other)
  21. : base(other)
  22. {
  23. this.requireClientCertificate = other.requireClientCertificate;
  24. this.requireCancellation = other.requireCancellation;
  25. if (other.issuerBindingContext != null)
  26. {
  27. this.issuerBindingContext = other.issuerBindingContext.Clone();
  28. }
  29. }
  30. public SslSecurityTokenParameters()
  31. : this(defaultRequireClientCertificate)
  32. {
  33. // empty
  34. }
  35. public SslSecurityTokenParameters(bool requireClientCertificate)
  36. : this(requireClientCertificate, defaultRequireCancellation)
  37. {
  38. // empty
  39. }
  40. public SslSecurityTokenParameters(bool requireClientCertificate, bool requireCancellation)
  41. : base()
  42. {
  43. this.requireClientCertificate = requireClientCertificate;
  44. this.requireCancellation = requireCancellation;
  45. }
  46. internal protected override bool HasAsymmetricKey { get { return false; } }
  47. public bool RequireCancellation
  48. {
  49. get
  50. {
  51. return this.requireCancellation;
  52. }
  53. set
  54. {
  55. this.requireCancellation = value;
  56. }
  57. }
  58. public bool RequireClientCertificate
  59. {
  60. get
  61. {
  62. return this.requireClientCertificate;
  63. }
  64. set
  65. {
  66. this.requireClientCertificate = value;
  67. }
  68. }
  69. internal BindingContext IssuerBindingContext
  70. {
  71. get
  72. {
  73. return this.issuerBindingContext;
  74. }
  75. set
  76. {
  77. if (value != null)
  78. {
  79. value = value.Clone();
  80. }
  81. this.issuerBindingContext = value;
  82. }
  83. }
  84. internal protected override bool SupportsClientAuthentication { get { return this.requireClientCertificate; } }
  85. internal protected override bool SupportsServerAuthentication { get { return true; } }
  86. internal protected override bool SupportsClientWindowsIdentity { get { return this.requireClientCertificate; } }
  87. protected override SecurityTokenParameters CloneCore()
  88. {
  89. return new SslSecurityTokenParameters(this);
  90. }
  91. internal protected override SecurityKeyIdentifierClause CreateKeyIdentifierClause(SecurityToken token, SecurityTokenReferenceStyle referenceStyle)
  92. {
  93. if (token is GenericXmlSecurityToken)
  94. return base.CreateGenericXmlTokenKeyIdentifierClause(token, referenceStyle);
  95. else
  96. return this.CreateKeyIdentifierClause<SecurityContextKeyIdentifierClause, LocalIdKeyIdentifierClause>(token, referenceStyle);
  97. }
  98. protected internal override void InitializeSecurityTokenRequirement(SecurityTokenRequirement requirement)
  99. {
  100. requirement.TokenType = (this.RequireClientCertificate) ? ServiceModelSecurityTokenTypes.MutualSslnego : ServiceModelSecurityTokenTypes.AnonymousSslnego;
  101. requirement.RequireCryptographicToken = true;
  102. requirement.KeyType = SecurityKeyType.SymmetricKey;
  103. requirement.Properties[ServiceModelSecurityTokenRequirement.SupportSecurityContextCancellationProperty] = this.RequireCancellation;
  104. if (this.IssuerBindingContext != null)
  105. {
  106. requirement.Properties[ServiceModelSecurityTokenRequirement.IssuerBindingContextProperty] = this.IssuerBindingContext.Clone();
  107. }
  108. requirement.Properties[ServiceModelSecurityTokenRequirement.IssuedSecurityTokenParametersProperty] = this.Clone();
  109. }
  110. public override string ToString()
  111. {
  112. StringBuilder sb = new StringBuilder();
  113. sb.AppendLine(base.ToString());
  114. sb.AppendLine(String.Format(CultureInfo.InvariantCulture, "RequireCancellation: {0}", this.RequireCancellation.ToString()));
  115. sb.Append(String.Format(CultureInfo.InvariantCulture, "RequireClientCertificate: {0}", this.RequireClientCertificate.ToString()));
  116. return sb.ToString();
  117. }
  118. }
  119. }