IdentityElement.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. //------------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------------------------
  4. namespace System.ServiceModel.Configuration
  5. {
  6. using System;
  7. using System.ServiceModel;
  8. using System.Configuration;
  9. using System.IdentityModel.Claims;
  10. using System.IdentityModel.Policy;
  11. using System.Security.Cryptography;
  12. using System.Security.Cryptography.X509Certificates;
  13. using System.Xml;
  14. public sealed partial class IdentityElement : ConfigurationElement
  15. {
  16. public IdentityElement()
  17. {
  18. }
  19. [ConfigurationProperty(ConfigurationStrings.UserPrincipalName)]
  20. public UserPrincipalNameElement UserPrincipalName
  21. {
  22. get { return (UserPrincipalNameElement)base[ConfigurationStrings.UserPrincipalName]; }
  23. }
  24. [ConfigurationProperty(ConfigurationStrings.ServicePrincipalName)]
  25. public ServicePrincipalNameElement ServicePrincipalName
  26. {
  27. get { return (ServicePrincipalNameElement)base[ConfigurationStrings.ServicePrincipalName]; }
  28. }
  29. [ConfigurationProperty(ConfigurationStrings.Dns)]
  30. public DnsElement Dns
  31. {
  32. get { return (DnsElement)base[ConfigurationStrings.Dns]; }
  33. }
  34. [ConfigurationProperty(ConfigurationStrings.Rsa)]
  35. public RsaElement Rsa
  36. {
  37. get { return (RsaElement)base[ConfigurationStrings.Rsa]; }
  38. }
  39. [ConfigurationProperty(ConfigurationStrings.Certificate)]
  40. public CertificateElement Certificate
  41. {
  42. get { return (CertificateElement)base[ConfigurationStrings.Certificate]; }
  43. }
  44. [ConfigurationProperty(ConfigurationStrings.CertificateReference)]
  45. public CertificateReferenceElement CertificateReference
  46. {
  47. get { return (CertificateReferenceElement)base[ConfigurationStrings.CertificateReference]; }
  48. }
  49. internal void Copy(IdentityElement source)
  50. {
  51. if (null == source)
  52. {
  53. throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("source");
  54. }
  55. PropertyInformationCollection properties = source.ElementInformation.Properties;
  56. if (properties[ConfigurationStrings.UserPrincipalName].ValueOrigin != PropertyValueOrigin.Default)
  57. {
  58. this.UserPrincipalName.Value = source.UserPrincipalName.Value;
  59. }
  60. if (properties[ConfigurationStrings.ServicePrincipalName].ValueOrigin != PropertyValueOrigin.Default)
  61. {
  62. this.ServicePrincipalName.Value = source.ServicePrincipalName.Value;
  63. }
  64. if (properties[ConfigurationStrings.Certificate].ValueOrigin != PropertyValueOrigin.Default)
  65. {
  66. this.Certificate.EncodedValue = source.Certificate.EncodedValue;
  67. }
  68. if (properties[ConfigurationStrings.CertificateReference].ValueOrigin != PropertyValueOrigin.Default)
  69. {
  70. this.CertificateReference.StoreName = source.CertificateReference.StoreName;
  71. this.CertificateReference.StoreLocation = source.CertificateReference.StoreLocation;
  72. this.CertificateReference.X509FindType = source.CertificateReference.X509FindType;
  73. this.CertificateReference.FindValue = source.CertificateReference.FindValue;
  74. }
  75. }
  76. public void InitializeFrom(EndpointIdentity identity)
  77. {
  78. if (identity == null)
  79. {
  80. throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("identity");
  81. }
  82. Claim claim = identity.IdentityClaim;
  83. if (ClaimTypes.Dns.Equals(claim.ClaimType))
  84. {
  85. this.Dns.Value = (string)claim.Resource;
  86. }
  87. else if (ClaimTypes.Spn.Equals(claim.ClaimType))
  88. {
  89. this.ServicePrincipalName.Value = (string)claim.Resource;
  90. }
  91. else if (ClaimTypes.Upn.Equals(claim.ClaimType))
  92. {
  93. this.UserPrincipalName.Value = (string)claim.Resource;
  94. }
  95. else if (ClaimTypes.Rsa.Equals(claim.ClaimType))
  96. {
  97. this.Rsa.Value = ((RSA)claim.Resource).ToXmlString(false);
  98. }
  99. else if (identity is X509CertificateEndpointIdentity)
  100. {
  101. X509Certificate2Collection certs = ((X509CertificateEndpointIdentity)identity).Certificates;
  102. #pragma warning suppress 56506 //[....]; this.Certificate can never be null (underlying configuration system guarantees)
  103. this.Certificate.EncodedValue = Convert.ToBase64String(certs.Export(certs.Count == 1 ? X509ContentType.SerializedCert : X509ContentType.SerializedStore));
  104. }
  105. }
  106. }
  107. }