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