บังคับใช้ HTTPS บน Appharbor

คำถามที่เกี่ยวข้อง: ที่นี่ - ที่นี่

ฉันมีแอปพลิเคชัน ASP.NET ที่ใช้งานบน appharbor การนำทางด้วยตนเองไปยัง URL https:// ทำงานได้ดี แต่ฉันต้องการ เท่านั้น ใช้ HTTPS นั่นคือ เปลี่ยนเส้นทางไปยัง HTTPS หากฉันได้รับคำขอ HTTP

มี 2 ​​วิธีในการบรรลุเป้าหมายนี้ ซึ่งฉันทราบ: (1) การใช้ web.config ซึ่งใช้งานไม่ได้เนื่องจากส่วนหัว X-Forwarded-Proto ถูกถอดโดย load-balancer บน appharbor (?) หรือ ( 2) สร้าง httpattribute แบบกำหนดเองตามที่แสดง ที่นี่

น่าเสียดายที่ทั้งสองวิธีเหล่านี้ใช้ได้ดีสำหรับฉัน - ทั้งสองวิธีให้ลูปการเปลี่ยนเส้นทางแก่ฉัน :( คำตอบทั้งหมดที่ฉันสามารถหาได้ค่อนข้างเก่า มีอะไรเปลี่ยนแปลงใน appharbor/asp.net ที่ฉันควรทราบหรือไม่

ขอบคุณล่วงหน้า.


person user1202032    schedule 18.04.2015    source แหล่งที่มา


คำตอบ (1)


คุณใช้ MVC ในแอปพลิเคชันของคุณหรือไม่? คุณลักษณะมีไว้สำหรับมัน

หากเป็นเพียง ASP.NET ปกติคุณสามารถใช้ HTTP Modules หรือ Global.asax เพื่อให้ได้ผลเช่นเดียวกัน

RequireHttpsAttribute โดย Rune น่าจะใช้ได้ ฉันใช้ ServiceStack บน AppHarbor แต่อิงตามแอตทริบิวต์ที่ฉันใช้จากโค้ดของ Rune ทุกวันนี้ก็ยังใช้อยู่

โหลดบาลานเซอร์ของ AppHb จะตั้งค่าส่วนหัว X-Forwarded-Proto ให้ตรงกับ Scheme โปรโตคอลขาเข้า (http หรือ https) เนื่องจากการรับส่งข้อมูลจากโหลดบาลานเซอร์จะถูกส่งต่อไปยังอินสแตนซ์ IIS ของแอปพลิเคชันของคุณเป็น HTTP (ดังนั้น Scheme ดั้งเดิมจึงสูญหายไป)

person Tyst    schedule 18.04.2015
comment
ฉันใช้ MVC ใช่ ฉันไม่แน่ใจจริงๆว่าฉันทำอะไรผิดไปแล้ว ฉันคัดลอก/วางโค้ดของ Rune และเปลี่ยนชื่อเป็น MyRequireHttpsAttribute จากนั้นฉันเพิ่ม [MyRequireHttpsAttribute] ที่ด้านบนของวิธีการทั้งหมดในคอนโทรลเลอร์ตัวใดตัวหนึ่งของฉัน ขณะนี้ได้รับข้อผิดพลาดเกี่ยวกับการเปลี่ยนเส้นทางมากเกินไป - person user1202032; 18.04.2015
comment
คุณกำลังโทรเปลี่ยนเส้นทางตัวเองในรหัสของคุณเองหรือเฉพาะแอตทริบิวต์เท่านั้น? RequireHttpsAttribute ได้รับผลกระทบอย่างแน่นอนในระหว่างการร้องขอของคุณหรือไม่? - person Tyst; 19.04.2015
comment
ฉันวางแอตทริบิวต์ไว้ด้านบนของคลาสคอนโทรลเลอร์แทนที่จะวางไว้บนแต่ละวิธี นอกจากนี้ ฉันย้ายแอตทริบิวต์จากพับ App_Start ไปยังโฟลเดอร์ของตัวเอง ดูเหมือนว่าจะแก้ไขปัญหาของฉันได้ และตอนนี้ฉันก็เชื่อมต่อโดยใช้ https อยู่เสมอ ฉันไม่แน่ใจว่าฉันเข้าใจอย่างถ่องแท้ว่าทำไม ขอบคุณสำหรับความช่วยเหลือของคุณ - person user1202032; 19.04.2015