WCF - ความปลอดภัย

บริการ WCF มีระบบรักษาความปลอดภัยที่แข็งแกร่งพร้อมโหมดหรือระดับความปลอดภัยสองโหมดเพื่อให้เฉพาะไคลเอนต์ที่ต้องการเท่านั้นที่สามารถเข้าถึงบริการได้ ภัยคุกคามด้านความปลอดภัยที่พบบ่อยในธุรกรรมแบบกระจายจะถูกควบคุมโดย WCF ในระดับใหญ่

คุณสมบัติความปลอดภัยที่สำคัญ

บริการ WCF มีคุณสมบัติด้านความปลอดภัยที่สำคัญสี่ประการดังที่แสดงในรูปด้านล่าง

  • Authentication - ในที่นี้การรับรองความถูกต้องไม่ได้ จำกัด อยู่ที่การระบุตัวผู้ส่งข้อความ แต่เป็นการร่วมกันกล่าวคือการรับรองความถูกต้องของผู้รับข้อความจะต้องแยกแยะความเป็นไปได้ของการโจมตีจากคนกลางทุกประเภท

  • Authorization- นี่เป็นขั้นตอนต่อไปที่ดำเนินการโดยบริการ WCF เพื่อให้มั่นใจในความปลอดภัยและที่นี่จะพิจารณาว่าบริการควรอนุญาตให้ผู้โทรดำเนินการต่อไปหรือไม่ แม้ว่าการอนุญาตจะไม่ขึ้นอยู่กับการพิสูจน์ตัวตน แต่โดยปกติจะเป็นไปตามการพิสูจน์ตัวตน

  • Confidentiality- การแลกเปลี่ยนข้อมูลระหว่างผู้โทรและบริการจะถูกเก็บไว้เป็นความลับเพื่อ จำกัด การตีความโดยผู้อื่นซึ่งข้อความนั้นไม่ได้ตั้งใจ เพื่อให้เป็นไปได้การเข้ารหัสจะถูกใช้ร่วมกับกลไกอื่น ๆ ที่หลากหลาย

  • Integrity - แนวคิดหลักประการสุดท้ายคือการรักษาความสมบูรณ์กล่าวคือให้ความมั่นใจว่าข้อความไม่ได้ถูกดัดแปลงโดยใครในการเดินทางจากผู้ส่งไปยังผู้รับ

โอนโหมดความปลอดภัย

WCF มีโหมดการรักษาความปลอดภัยการถ่ายโอนต่อไปนี้เพื่อให้แน่ใจว่ามีการสื่อสารที่ปลอดภัยระหว่างไคลเอนต์และเซิร์ฟเวอร์ โหมดการรักษาความปลอดภัยการถ่ายโอนที่หลากหลายมีดังต่อไปนี้

  • None- โหมดนี้ไม่รับประกันความปลอดภัยของข้อความและบริการจะไม่ได้รับข้อมูลรับรองใด ๆ เกี่ยวกับไคลเอนต์ โหมดนี้มีความเสี่ยงสูงเนื่องจากอาจอนุญาตให้มีการปลอมแปลงข้อความได้จึงไม่แนะนำ

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "None"/>
   </binding>
</wsHttpBinding>
  • Transport- โหมดนี้เป็นวิธีที่ง่ายที่สุดในการถ่ายโอนข้อความอย่างปลอดภัยผ่านการใช้โปรโตคอลการสื่อสารเช่น TCP, IPC, Https และ MSMQ โหมดนี้จะมีประสิทธิภาพมากขึ้นเมื่อการถ่ายโอนเป็นแบบจุดต่อจุดและส่วนใหญ่จะใช้ในสภาพแวดล้อมที่มีการควบคุมเช่นแอปพลิเคชันอินทราเน็ต

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Transport"/>
   </binding>
</wsHttpBinding>
  • Message- โหมดความปลอดภัยช่วยให้สามารถตรวจสอบความถูกต้องร่วมกันและให้ความเป็นส่วนตัวในระดับที่ดีเนื่องจากข้อความถูกเข้ารหัสและสามารถส่งผ่าน http ซึ่งไม่ถือว่าเป็นโปรโตคอลที่ปลอดภัย ที่นี่มีการรักษาความปลอดภัยแบบ end-to-end โดยไม่ต้องพิจารณาว่ามีตัวกลางกี่คนที่เกี่ยวข้องกับการถ่ายโอนข้อความและมีการขนส่งที่ปลอดภัยหรือไม่ โดยทั่วไปจะใช้โหมดนี้โดยแอปพลิเคชันอินเทอร์เน็ต

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Message"/>
   </binding>
</wsHttpBinding>
  • Mixed - โหมดความปลอดภัยนี้ไม่ได้ใช้บ่อยและการรับรองความถูกต้องของไคลเอ็นต์มีให้เฉพาะในระดับไคลเอนต์เท่านั้น

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "TransportWithMessageCredential"/>
   </binding>
</wsHttpBinding>
  • Both- โหมดความปลอดภัยนี้ประกอบด้วยทั้งการรักษาความปลอดภัยการขนส่งและการรักษาความปลอดภัยของข้อความเพื่อให้มีความปลอดภัยที่แข็งแกร่ง แต่มักจะส่งผลให้ประสิทธิภาพโดยรวมทำงานหนักเกินไป อันนี้รองรับเฉพาะ MSMQ

<netMsmqBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Both"/>
   </binding>
</netMsmqBinding>

การผูก WCF ทั้งหมดยกเว้น BasicHttpBinding มีขอบเขตของความปลอดภัยในการถ่ายโอนโดยค่าเริ่มต้น

ระดับความปลอดภัยของข้อความ

การรักษาความปลอดภัยระดับข้อความไม่ขึ้นอยู่กับโปรโตคอล WCF ใช้กับข้อมูลข้อความโดยการเข้ารหัสข้อมูลโดยใช้อัลกอริทึมมาตรฐาน ข้อมูลรับรองไคลเอ็นต์จำนวนหนึ่งพร้อมใช้งานสำหรับการผูกที่แตกต่างกันสำหรับระดับความปลอดภัยของข้อความและจะกล่าวถึงด้านล่าง

Client credentials for message level security in WCF

None- ที่นี่มีการใช้การเข้ารหัสเพื่อรักษาความปลอดภัยของข้อความในขณะที่ไม่มีการพิสูจน์ตัวตนไคลเอ็นต์ซึ่งหมายความว่าไคลเอนต์ที่ไม่ระบุชื่อสามารถเข้าถึงบริการได้ ยกเว้น BasicHttpBinding การผูก WCF ทั้งหมดสนับสนุนข้อมูลรับรองไคลเอ็นต์นี้ อย่างไรก็ตามควรสังเกตว่าสำหรับ NetNamedPipeBinding ข้อมูลรับรองไคลเอนต์นี้ไม่มีให้ใช้งานเลย

  • Windows- ที่นี่ทั้งการเข้ารหัสข้อความและการรับรองความถูกต้องของไคลเอ็นต์จะเกิดขึ้นสำหรับผู้ใช้ที่ล็อกอินแบบเรียลไทม์ ในกรณีนี้เช่นกันซึ่งแตกต่างจากการผูก WCF อื่น ๆ ทั้งหมด NetNamedPipeBinding จะไม่พร้อมใช้งานและ BasicHttpBinding ไม่ให้การสนับสนุน

  • UserName- ที่นี่ข้อความจะถูกเข้ารหัสและรักษาความปลอดภัยด้วยการนำเสนอ UserName และไคลเอนต์จะได้รับการรับรองความถูกต้องเนื่องจากพวกเขาจำเป็นต้องเสนอรหัสผ่าน BasicHttpBinding เช่นเดียวกับข้อมูลรับรองไคลเอนต์สองรายการข้างต้นไม่รองรับ UserName และไม่สามารถใช้ได้กับ NetNamedPipeBinding

  • Certificate- พร้อมกับการเข้ารหัสข้อความทั้งไคลเอนต์และบริการจะได้รับการรับรองความถูกต้องด้วยใบรับรอง ข้อมูลรับรองไคลเอ็นต์นี้พร้อมใช้งานและได้รับการสนับสนุนโดยการผูก WCF ทั้งหมดยกเว้น NetNamedPipeBinding

  • IssuedToken- โทเค็นที่ออกให้จากหน่วยงานเช่น Cardspace จะใช้ในการตรวจสอบความถูกต้องของข้อความ การเข้ารหัสข้อความจะดำเนินการที่นี่ด้วย

รหัสต่อไปนี้แสดงวิธีกำหนดค่าข้อมูลรับรองไคลเอ็นต์ในระดับ / โหมดความปลอดภัยของข้อความ WCF

<netTcpBinding>
   <binding name = "WCFMessageSecurityExample">
      <security mode = "Message">
         <message clientCredentialType = "None"/>
      </security>   
   </binding>
</netTcpBinding>

<netMsmqBinding>...</netMsmqBinding>
</bindings>
<behaviors>...</behaviors>

ที่นี่ต้องสังเกตว่าโหมดการรักษาความปลอดภัยการขนส่งมีความได้เปรียบเหนือระดับความปลอดภัยของข้อความเนื่องจากในอดีตนั้นเร็วกว่า ไม่ต้องการการเข้ารหัสเพิ่มเติมใด ๆ และให้การสนับสนุนการทำงานร่วมกันดังนั้นจึงไม่ลดประสิทธิภาพโดยรวม

อย่างไรก็ตามจากมุมมองด้านความปลอดภัยโหมดการรักษาความปลอดภัยของข้อความมีประสิทธิภาพมากขึ้นและไม่ขึ้นอยู่กับโปรโตคอลและมีการรักษาความปลอดภัยแบบ end-to end