PageRenderTime 34ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/ExpressInteropBinding/Microsoft.ServiceModel.Interop/Metro/MetroSecurity.cs

#
C# | 63 lines | 39 code | 10 blank | 14 comment | 5 complexity | b9b0a4cb18da0ba5de9ad61d37408f16 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, Apache-2.0
  1. // <copyright file="MetroSecurity.cs" company="Microsoft Corporation">
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. // </copyright>
  4. namespace Microsoft.ServiceModel.Interop.Metro
  5. {
  6. using System.ServiceModel;
  7. /// <summary>
  8. /// Security binding element for Metro
  9. /// </summary>
  10. public class MetroSecurity : InteropSecurity
  11. {
  12. private MetroSecurityMode mode;
  13. /// <summary>
  14. /// Initializes a new instance of the MetroSecurity class
  15. /// </summary>
  16. /// <param name="security">Security binding element</param>
  17. /// <param name="mode">Security Mode</param>
  18. public MetroSecurity(WSHttpSecurity security, MetroSecurityMode mode)
  19. : base(security)
  20. {
  21. this.InnerSecurity.Mode = SecurityMode.Message;
  22. this.InnerSecurity.Message.NegotiateServiceCredential = false;
  23. this.mode = mode;
  24. this.ConfigureSecurity();
  25. }
  26. /// <summary>
  27. /// Gets or sets the security mode
  28. /// </summary>
  29. public MetroSecurityMode Mode
  30. {
  31. get
  32. {
  33. return this.mode;
  34. }
  35. set
  36. {
  37. this.mode = value;
  38. this.ConfigureSecurity();
  39. }
  40. }
  41. private void ConfigureSecurity()
  42. {
  43. if (this.Mode == MetroSecurityMode.UserNameOverCertificate)
  44. {
  45. this.InnerSecurity.Message.ClientCredentialType = MessageCredentialType.UserName;
  46. }
  47. else if (this.Mode == MetroSecurityMode.MutualCertificate)
  48. {
  49. this.InnerSecurity.Message.ClientCredentialType = MessageCredentialType.Certificate;
  50. }
  51. }
  52. }
  53. }