SignalR oAuth บนโฮสต์ของตนเอง

ฉันมี webapi ที่ทำงานบนแอปที่โฮสต์เอง มีการรักษาความปลอดภัยผ่าน oauth และฉันกำลังตั้งค่าส่วนหัวการอนุญาตสำหรับการเรียก API วิธีนี้ใช้งานได้ดี เรามีข้อมูลระบุตัวตนผู้ใช้ในทุกการโทร

ตอนนี้ฉันสามารถส่งโทเค็นการอนุญาตเดียวกันโดยสตริงการสืบค้นหรือคุกกี้ (หรือส่วนหัวของการเชื่อมต่อบางประเภท) ไปยังผู้ส่งสัญญาณ (โฮสต์ด้วยตนเองในแอปเดียวกัน)

โทเค็นจะถูกส่งไปยังเซิร์ฟเวอร์สำหรับผู้ส่งสัญญาณ ฉันสามารถเพิ่มลงใน context.cookie หรือในส่วนหัวได้

แต่..ฉันไม่สามารถสร้างผู้ใช้ที่ได้รับการรับรองความถูกต้องได้จากที่ไหน ดูเหมือนว่าฉันจะประสบปัญหาข้อผิดพลาด 401

ฉันคิดว่าฉันขาดโค้ดสำคัญที่ควรจะใช้โทเค็นและสร้างผู้ใช้ที่ได้รับการรับรองความถูกต้องสำหรับผู้ส่งสัญญาณ (แม้ว่า webapi/owin จะทำเองก็ตาม)

ใครมีพอยน์เตอร์หรือตัวอย่างที่ signalr ทำงานร่วมกับ oauth บนโฮสต์ของตัวเองได้บ้าง


person AndyBond    schedule 09.06.2015    source แหล่งที่มา
comment
ตกลง - ถ้าฉันปิดรหัสที่ใช้ในการเปิดใช้งานการตรวจสอบสิทธิ์ผู้ถือ webapi มันก็ใช้งานได้ (แสดงความคิดเห็น 2 บรรทัดนี้) : //config.SuppressDefaultHostAuthentication(); //config.Filters.Add(HostAuthenticationFilter ใหม่ (OAuthDefaults.AuthenticationType)); ดังนั้นฉันเดาว่าฉันต้องเพิ่มตัวกรองลงในไปป์ไลน์ signalR ด้วย   -  person AndyBond    schedule 09.06.2015


คำตอบ (1)


คุณถูกต้องว่าคุณต้องตั้งค่าวิธีการตรวจสอบสิทธิ์และตั้งค่าผู้ใช้เมื่อต้องการใช้ SignalR กับ OAuth

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

ฉันมีตัวอย่างที่

https://github.com/louislewis2/AngularJSAuthentication/blob/master/AngularJSAuthentication.API/SignalRHelpers/QueryStringBearerAuthorizeAttribute.cs

เมื่อใช้งานแล้ว คุณเพียงแค่ตกแต่งฮับของคุณด้วย [QueryStringBearerAuthorize]

ลิงก์ GitHub มีตัวอย่างการทำงานที่สมบูรณ์สำหรับสิ่งนี้ และอาจให้ข้อมูลเชิงลึกอันมีค่าบางประการ

person Louis Lewis    schedule 17.06.2015