ทำให้การเชื่อมโยง MEX ไม่ปลอดภัยในขณะที่รักษาความปลอดภัยการเชื่อมโยง HTTP ด้วย UsernamePasswordValidator หรือไม่

เรากำลังใช้ UsernamePasswordValidator ร่วมกับใบรับรองเพื่อรักษาความปลอดภัยในการเข้าถึงบริการ WCF ของเรา

อย่างไรก็ตาม นโยบายการให้สิทธิ์แบบกำหนดเองที่เราใช้คือพฤติกรรมของบริการ ไม่ใช่พฤติกรรมของปลายทาง ดังนั้นจึงนำไปใช้กับปลายทางทั้งหมด รวมถึงปลายทาง MEX ด้วย เราต้องการที่จะไปและดึงข้อมูลอ้างอิงบริการโดยใช้ Visual Studio โดยไม่ต้องแสดงความคิดเห็นเกี่ยวกับพฤติกรรมของบริการทุกครั้ง แต่เนื่องจากทั้งจุดสิ้นสุด mex และ wshttp มีความปลอดภัย เราจึงได้รับข้อผิดพลาดเมื่อทำ "เพิ่มการอ้างอิงบริการ .. "

มีวิธีแก้ไขปัญหานี้ไหม?


person mgerety    schedule 24.06.2009    source แหล่งที่มา


คำตอบ (2)


คุณใช้การผูกแบบเดียวกันกับทั้งสองอย่างหรือไม่? หากเป็นเช่นนั้น ให้ลองเชื่อมโยง 2 รายการแยกกัน - รายการหนึ่งสำหรับจุดสิ้นสุด mex และอีกรายการหนึ่งสำหรับ wshttp:

ดังนั้นสำหรับการบริการ - บางอย่างเช่น:

<wsHttpBinding><binding name="wsHttpBindingMessageUname">
<security mode="Message">
    <message clientCredentialType="UserName" negotiateServiceCredential="true"
      establishSecurityContext="false" />
</security></binding></wsHttpBinding>

และสำหรับจุดสิ้นสุด mex (ไม่มีการรักษาความปลอดภัย):

<customBinding><binding name="customMex">
<textMessageEncoding>
    <readerQuotas maxDepth="2147483647"
          maxStringContentLength="2147483647"
          maxArrayLength="2147483647"
          maxBytesPerRead="2147483647"
          maxNameTableCharCount="2147483647" />
</textMessageEncoding>
<httpTransport transferMode="Buffered"
               maxReceivedMessageSize="2147483647"
               maxBufferSize="2147483647"/></binding></customBinding>

จุดสิ้นสุดของบริการจะมีลักษณะดังนี้:

<endpoint address="" behaviorConfiguration="Server.Services.DefaultEndpointBehavior"  binding="wsHttpBinding" bindingConfiguration="wsHttpBindingMessageUname" name="DefaultHttp" contract="Server.Services.IMyService" listenUriMode="Explicit" />
<endpoint address="mex" binding="customBinding" contract="IMetadataExchange" name="" bindingConfiguration="customMex" listenUriMode="Explicit" />

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

โพสต์ MSDN ต่อไปนี้มีตัวอย่างสิ่งนี้และข้อมูลเพิ่มเติมสามารถเป็นได้ พบได้ในบล็อกนี้เกี่ยวกับจุดสิ้นสุด mex ที่ปลอดภัย

person Tanner    schedule 25.06.2009

ฉันคิดว่าจากคำถามเขายังตั้งข้อสังเกตอีกว่าเขาใช้พฤติกรรมการบริการ ดังนั้นการกำหนดค่าการเชื่อมโยงจะไม่สร้างความแตกต่าง เนื่องจากบริการทั้งหมดใช้ UserNamePassword Validator

มีสองสิ่งที่อยู่ในใจที่นี่

ลบการเชื่อมโยง mex ที่ชัดเจนและเพิ่มภายใต้ลักษณะการทำงานของบริการ

<serviceMetadata httpsGetEnabled="true" />

หรือเก็บการเชื่อมโยง mex และเปิดใช้งาน

<serviceMetadata httpGetEnabled="true" />

CustomUserNameValidator ไม่ได้รับการดำเนินการเมื่อร้องขอข้อมูลเมตา ดังนั้นหาก httpsgetenabled ไม่ได้เปิดอยู่ และคุณมีการผูก mex บน http คุณต้องมี httpGetenabled เป็นอย่างน้อย

person Neil    schedule 25.06.2009
comment
ฉันคิดว่ามันควรจะยังใช้งานได้เนื่องจากบริการของฉันทั้งหมดมีพฤติกรรมระดับบริการที่ระบุ serviceCredentials: cert & uname/pass จากนั้นบนจุดสิ้นสุดบริการ ฉันมีการตั้งค่าพฤติกรรมการกำหนดค่าเป็นพฤติกรรมจุดสิ้นสุดที่ว่างเปล่า (เพียงแค่มีชื่อซึ่งอาจไม่จำเป็น - แต่ไม่พังดังนั้นจึงไม่ได้แก้ไข) จากนั้นจุดปลาย mex จะไม่มีการกำหนดค่าพฤติกรรม - person Tanner; 25.06.2009
comment
มันควรจะใช้งานได้ แต่ชื่อผู้ใช้ไม่ใช่ปัญหา ฉันไม่คิดว่ามันจะเป็นการเข้ารหัสของเลเยอร์การขนส่งหรือเลเยอร์ข้อความ หรือการผูกข้อมูลที่ใช้ ฉันคิดว่ามันเป็นความจริงที่ว่า mex บน http เมื่อบริการพยายามทำงานเหมือน https มีใบรับรองเป็นผู้กระทำผิด - person Neil; 25.06.2009