1 //------------------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 //------------------------------------------------------------------------------
5 namespace System.ServiceModel.Configuration
8 using System.ServiceModel;
9 using System.Configuration;
10 using System.IdentityModel.Claims;
11 using System.IdentityModel.Policy;
12 using System.Security.Cryptography;
13 using System.Security.Cryptography.X509Certificates;
16 public sealed partial class IdentityElement : ConfigurationElement
18 public IdentityElement()
22 [ConfigurationProperty(ConfigurationStrings.UserPrincipalName)]
23 public UserPrincipalNameElement UserPrincipalName
25 get { return (UserPrincipalNameElement)base[ConfigurationStrings.UserPrincipalName]; }
28 [ConfigurationProperty(ConfigurationStrings.ServicePrincipalName)]
29 public ServicePrincipalNameElement ServicePrincipalName
31 get { return (ServicePrincipalNameElement)base[ConfigurationStrings.ServicePrincipalName]; }
34 [ConfigurationProperty(ConfigurationStrings.Dns)]
37 get { return (DnsElement)base[ConfigurationStrings.Dns]; }
40 [ConfigurationProperty(ConfigurationStrings.Rsa)]
43 get { return (RsaElement)base[ConfigurationStrings.Rsa]; }
46 [ConfigurationProperty(ConfigurationStrings.Certificate)]
47 public CertificateElement Certificate
49 get { return (CertificateElement)base[ConfigurationStrings.Certificate]; }
52 [ConfigurationProperty(ConfigurationStrings.CertificateReference)]
53 public CertificateReferenceElement CertificateReference
55 get { return (CertificateReferenceElement)base[ConfigurationStrings.CertificateReference]; }
58 internal void Copy(IdentityElement source)
62 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("source");
65 PropertyInformationCollection properties = source.ElementInformation.Properties;
66 if (properties[ConfigurationStrings.UserPrincipalName].ValueOrigin != PropertyValueOrigin.Default)
68 this.UserPrincipalName.Value = source.UserPrincipalName.Value;
70 if (properties[ConfigurationStrings.ServicePrincipalName].ValueOrigin != PropertyValueOrigin.Default)
72 this.ServicePrincipalName.Value = source.ServicePrincipalName.Value;
74 if (properties[ConfigurationStrings.Certificate].ValueOrigin != PropertyValueOrigin.Default)
76 this.Certificate.EncodedValue = source.Certificate.EncodedValue;
78 if (properties[ConfigurationStrings.CertificateReference].ValueOrigin != PropertyValueOrigin.Default)
80 this.CertificateReference.StoreName = source.CertificateReference.StoreName;
81 this.CertificateReference.StoreLocation = source.CertificateReference.StoreLocation;
82 this.CertificateReference.X509FindType = source.CertificateReference.X509FindType;
83 this.CertificateReference.FindValue = source.CertificateReference.FindValue;
87 public void InitializeFrom(EndpointIdentity identity)
91 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("identity");
94 Claim claim = identity.IdentityClaim;
95 if (ClaimTypes.Dns.Equals(claim.ClaimType))
97 this.Dns.Value = (string)claim.Resource;
99 else if (ClaimTypes.Spn.Equals(claim.ClaimType))
101 this.ServicePrincipalName.Value = (string)claim.Resource;
103 else if (ClaimTypes.Upn.Equals(claim.ClaimType))
105 this.UserPrincipalName.Value = (string)claim.Resource;
107 else if (ClaimTypes.Rsa.Equals(claim.ClaimType))
109 this.Rsa.Value = ((RSA)claim.Resource).ToXmlString(false);
111 else if (identity is X509CertificateEndpointIdentity)
113 X509Certificate2Collection certs = ((X509CertificateEndpointIdentity)identity).Certificates;
114 #pragma warning suppress 56506 //Microsoft; this.Certificate can never be null (underlying configuration system guarantees)
115 this.Certificate.EncodedValue = Convert.ToBase64String(certs.Export(certs.Count == 1 ? X509ContentType.SerializedCert : X509ContentType.SerializedStore));