ไม่สามารถรับ FormsAuthentication เพื่อทำงานกับ WCF ได้อย่างถูกต้อง

ฉันมีทั้งโปรเจ็กต์ wcf และ asp.net ด้วยกันในโปรเจ็กต์เดียวกัน (ฉันใช้ Azure ดังนั้นจึงสะดวกกว่า)

ฉันมีชุดนี้ใน web.config:

<system.serviceModel>  
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel>

บริการ wcf ของฉันตกแต่งด้วย:

[AspNetCompatibilityRequirements(
    RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

เมื่อตั้งค่าคุณสมบัติเหล่านั้นแล้ว HttpContext.Current.User ไม่ควรตั้งค่าให้ฉันโดยอัตโนมัติเมื่อฉันเรียกใช้วิธีการในบริการ wcf ของฉัน ขณะนี้ HttpContext.Current.User เป็นโมฆะและไม่ได้ตั้งค่าให้ฉันโดยอัตโนมัติ

ฉันคิดว่าถ้าฉันใช้ aspNetCompatibilityEnabled เมธอด Application_AuthenticationRequest จะเริ่มทำงานใน Global.asax เมื่อเมธอด wcf ถูกดำเนินการ แต่กลับไม่เป็นเช่นนั้น

คุกกี้ .aspxauth ได้รับการส่งผ่านไปยังบริการ wcf อย่างถูกต้อง และฉันสามารถถอดรหัสคุกกี้ด้วยตนเองและตั้งค่าผู้ใช้ปัจจุบันได้

ข้อเสนอแนะว่าเหตุใดสิ่งนี้จึงไม่ทำงานอย่างที่ฉันคาดหวัง


person Mark E    schedule 15.04.2010    source แหล่งที่มา
comment
ยินดีต้อนรับสู่ StackOverflow! หวังว่าคุณจะพบคำตอบของคุณที่นี่ บทนำสั้นๆ: หากคุณโพสต์โค้ดขนาดสั้นหรือเนื้อหาไฟล์ XML / config คุณควรเน้นบรรทัดเหล่านั้นเสมอ จากนั้นกดปุ่มโค้ด (101 010) บนแถบเครื่องมือตัวแก้ไขเพื่อจัดรูปแบบให้สวยงาม และดำเนินการเน้นไวยากรณ์ต่อไป สิ่งนี้ทำให้โลกแตกต่าง!   -  person marc_s    schedule 15.04.2010


คำตอบ (1)


คุณได้รับข้อมูลประจำตัวผู้ใช้ที่คาดหวังในไฟล์

ServiceSecurityContext.Current.PrimaryIdentity

ฟิลด์ใดที่มีอยู่ในโค้ดของวิธีการเซิร์ฟเวอร์ของคุณ ?? ควรเป็นรูปแบบการสืบทอด IIdentity ที่ให้ข้อมูลผู้ใช้แก่คุณ หากมี

person marc_s    schedule 15.04.2010
comment
'System.ServiceModel.ServiceSecurityContext.Current' เป็นโมฆะ - person Mark E; 15.04.2010
comment
ตกลง ดังนั้นคุณไม่ได้รับการรับรองความถูกต้องอย่างเป็นทางการกับบริการ WCF... คุณช่วยแสดงการกำหนดค่าฝั่งเซิร์ฟเวอร์และไคลเอ็นต์สำหรับการเชื่อมโยงของคุณให้เราทราบได้ไหม คุณใช้การรักษาความปลอดภัย WCF ประเภทใด?? - person marc_s; 15.04.2010
comment
ตกลง. ฉันค้นพบว่าปัญหาของฉันคืออะไร แต่ฉันไม่รู้ว่าจะแก้ไขได้อย่างไร ฉันใช้ HttpModule แบบธรรมดา (ซึ่งทำเส้นทางการเขียนซ้ำ) เพื่อกำจัด .svc ที่ส่วนท้ายของชื่อบริการ ด้วยเหตุนี้ Application_AuthenticateRequest จึงไม่เริ่มทำงานและเห็นได้ชัดว่า HttpContext.Current.User ไม่ได้รับการตั้งค่าเช่นกัน ข้อเสนอแนะ? - person Mark E; 16.04.2010