SecureConversationServiceCredential.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. //-----------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //-----------------------------------------------------------------------------
  4. namespace System.ServiceModel.Security
  5. {
  6. using System.IdentityModel.Policy;
  7. using System.ServiceModel;
  8. using System.IdentityModel.Tokens;
  9. using System.Runtime.Serialization;
  10. using System.Collections.ObjectModel;
  11. public sealed class SecureConversationServiceCredential
  12. {
  13. static readonly SecurityStateEncoder defaultSecurityStateEncoder = new DataProtectionSecurityStateEncoder();
  14. SecurityStateEncoder securityStateEncoder;
  15. Collection<Type> securityContextClaimTypes;
  16. bool isReadOnly;
  17. internal SecureConversationServiceCredential()
  18. {
  19. this.securityStateEncoder = defaultSecurityStateEncoder;
  20. securityContextClaimTypes = new Collection<Type>();
  21. SamlAssertion.AddSamlClaimTypes(securityContextClaimTypes);
  22. }
  23. internal SecureConversationServiceCredential(SecureConversationServiceCredential other)
  24. {
  25. this.securityStateEncoder = other.securityStateEncoder;
  26. this.securityContextClaimTypes = new Collection<Type>();
  27. for (int i = 0; i < other.securityContextClaimTypes.Count; ++i)
  28. {
  29. this.securityContextClaimTypes.Add(other.securityContextClaimTypes[i]);
  30. }
  31. this.isReadOnly = other.isReadOnly;
  32. }
  33. public SecurityStateEncoder SecurityStateEncoder
  34. {
  35. get
  36. {
  37. return this.securityStateEncoder;
  38. }
  39. set
  40. {
  41. ThrowIfImmutable();
  42. this.securityStateEncoder = value;
  43. }
  44. }
  45. public Collection<Type> SecurityContextClaimTypes
  46. {
  47. get { return this.securityContextClaimTypes; }
  48. }
  49. internal void MakeReadOnly()
  50. {
  51. this.isReadOnly = true;
  52. }
  53. void ThrowIfImmutable()
  54. {
  55. if (this.isReadOnly)
  56. {
  57. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.ObjectIsReadOnly)));
  58. }
  59. }
  60. }
  61. }