2013-12-13 11 views
8

का उपयोग कर लॉगिन पेज पर रीडायरेक्ट किया गया है। मेरे पास लोड बैलेंसर के पीछे एक एडब्लूएस मशीन पर चल रहे स्प्रिंग सिक्योरिटी कोर का उपयोग करके एक ग्रेल्स ऐप है।Grails स्प्रिंग सिक्योरिटी https

लोड बैलेंसर एसएसएल कनेक्शन को आगे बढ़ाता है और आगे हमारे उदाहरण के पोर्ट 8080 को उचित एक्स-फॉरवर्ड-प्रोटो हेडर जोड़ता है।

मैं https के उपयोग से लॉगिन पेज पर रीडायरेक्ट करने के लिए किसी सुरक्षित पृष्ठ पर सीधे पहुंच प्राप्त करना चाहता हूं।

उदाहरण के लिए एक अनुरोध https://myapp.com/private/pagehttps://myapp.com/login/auth

मैं अपने config.groovy में रखते रीडायरेक्ट करना चाहिए:

grails.plugin.springsecurity.secureChannel.definition = [ 
    '/login/**':  'REQUIRES_SECURE_CHANNEL' 
] 

लेकिन इस http प्रवेश पृष्ठ पर एक रीडायरेक्ट लूप (HTTP कोड 302) (का कारण बनता है

grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true 
grails.plugin.springsecurity.auth.forceHttps = true 
: http://myapp.com/login/auth)

तो मैं बस के साथ की कोशिश की

लेकिन इस http प्रवेश पृष्ठ (http://myapp.com/login/auth)

  1. मुद्दा सिर्फ उत्पादन सेटअप (युद्ध लोड संतुलन के पीछे बिलाव के लिए तैनात किया) के साथ presentig है करने के लिए एक रीडायरेक्ट (HTTP कोड 302) का कारण बनता है।
  2. यदि मैं अपने loacal dev मशीन पर एक ही config.groovy का परीक्षण करता हूं तो https://myapp.com/login/auth पर रीडायरेक्ट ठीक होता है।
  3. मैं वसंत सुरक्षा के लिए एक अलग httpsPort निर्दिष्ट करने के लिए कोशिश की, इसे फिर से अपने स्थानीय देव मशीन पर काम करता है, लेकिन यह पूरी तरह से है कि पुनः निर्देशित रहता तैनात अनुप्रयोग में नजरअंदाज कर दिया है

कोई भाग्य के बारे में http के लिए इसी तरह के पदों पर गुप्त, किसी भी विचार?

उत्तर

4

मैं बस उसी परिदृश्य से गुजर गया। Https पर फंस गया, फिर रीडायरेक्ट, और अब सब ठीक है। इन Config.groovy सेटिंग्स का उपयोग करें: springsecurity 2.0 का उपयोग नहीं करने वालों के लिए

grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true 
grails.plugin.springsecurity.portMapper.httpPort = 80 
grails.plugin.springsecurity.portMapper.httpsPort = 443 
grails.plugin.springsecurity.secureChannel.secureHeaderName = 'X-Forwarded-Proto' 
grails.plugin.springsecurity.secureChannel.secureHeaderValue = 'http' 
grails.plugin.springsecurity.secureChannel.insecureHeaderName = 'X-Forwarded-Proto' 
grails.plugin.springsecurity.secureChannel.insecureHeaderValue = 'https' 

ध्यान दें, यह प्लग इन 'और नहीं' एस 'के बिना' प्लगइन 'है।

मेरे बीनस्टॉक लोड संतुलन सेटिंग्स इस तरह दिखेगा (मैं एक SSL प्रमाणपत्र स्थापित किया है, मैं इसे नहीं दिखाया जा सका):

enter image description here

EC2 लोड संतुलन सेटिंग्स में यकीन है कि अपने श्रोताओं सही सेट किए गए हैं :

:

enter image description here

और अंत में EC2 सुरक्षा समूहों में यकीन ईबी पोर्ट 80 और 443 ईएलबी से पर अनुरोध स्वीकार कर

enter image description here

नोट कहीं कुछ भी की मेरी सेटअप में मैंने कभी बंदरगाहों 8080 या 8443 का संदर्भ है कि, भले ही है कि क्या मैं परीक्षण के लिए मेरी स्थानीय होस्ट पर इस्तेमाल करते हैं। इसे पढ़ने वाले किसी भी मुद्दे को हल करने के लिए उन बंदरगाहों का उपयोग करने की कोशिश करने के बारे में सोच सकते हैं। मेरे सेटअप की आवश्यकता नहीं थी।

+0

आपकी मदद के लिए बहुत बहुत धन्यवाद लेकिन कोई भाग्य नहीं! मैंने एक ही सेटअप को पुन: उत्पन्न किया, आंतरिक पोर्ट को 80 तक ले जाया लेकिन यह हमेशा http पर रीडायरेक्ट करता है ... क्या आपके पास grails.plugin.springsecurity.secureChannel.definition में कुछ भी है? इस बारे में कोई विचार कि मैं इसे कम से कम कैसे डिबग कर सकता हूं? – Paull

+1

मेरे पास safeChannel.definition के लिए कोई मान सेट नहीं है। क्या आपके पास अपने उत्पादन वातावरण के लिए grails.serverURL सेट है? यह कुछ और है जो मेरा ऐप तोड़ रहा था, लेकिन मुझे लगता है कि क्लाउडफ्रंट स्थापित करने से संबंधित था। मैंने इसे लॉग के साथ डीबग नहीं किया। मैं कॉन्फ़िगरेशन फ़ाइल में बदलाव करता हूं और एक नया युद्ध अपलोड करता हूं, फिर ब्राउज़र को एक ब्रेकिंग देखने के लिए प्रत्येक परिदृश्य के माध्यम से कदम उठाता हूं। तब मैं एक बदलाव करूँगा और पुनः प्रयास करूंगा। – spock99

+0

आप वसंत सुरक्षा का किस संस्करण का उपयोग कर रहे हैं? – spock99

4

मैं एडब्ल्यूएस पर स्प्रिंग सिक्योरिटी कोर 2.0-आरसी 4 के साथ एटीएस पर लोड और बैलेंसर के साथ अपने Grails ऐप की मेजबानी कर रहा हूं, और spock99 (ऊपर) और एडब्ल्यूएस के रवि एल के लिए धन्यवाद, मुझे यह काम मिल गया।

// Required because user auth uses absolute redirects 
    grails.serverURL = "http://example.com" 

    grails.plugin.springsecurity.secureChannel.definition = [ 
     '/assets/**':  'ANY_CHANNEL',// make js, css, images available to logged out pages 
     '/**':   'REQUIRES_SECURE_CHANNEL', 
    ] 

    // overriding values in DefaultSecurityConfig.groovy from the SpringSecurityCore 2.0-RC4 
    grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true 
    grails.plugin.springsecurity.portMapper.httpPort = 80 
    grails.plugin.springsecurity.portMapper.httpsPort = 443 

नोट::

मैं config.groovy में निम्नलिखित किया निम्नलिखित वसंत सुरक्षा कोर 2.0 RC4 के लिए आवश्यक नहीं थे - वे पहले से ही DefaultSecurityConfig.groovy

में हैं
secureHeaderName = 'X-Forwarded-Proto' 
    secureHeaderValue = 'http' 
    insecureHeaderName = 'X-Forwarded-Proto' 
    insecureHeaderValue = 'https' 

मैं झूठ 'अस्वास्थ्यकर' रीडिंग प्राप्त कर रहा था क्योंकि '/' को 302 रीडायरेक्ट/लॉगिन/ऑथ पर रीडायरेक्ट किया गया है, इसलिए मैंने एडब्लूएस के लिए होम कंट्रोलर (जिसे मैंने '/ स्वास्थ्य' में मैप किया था) को एक स्वास्थ्य() विधि जोड़ा:

मेरे लिए कुंजी यह थी कि लोड बैलेंसर पर चल रहे कई उदाहरणों के साथ सत्र कुकीज़ को ठीक तरह से संभाला नहीं जा रहा था (उपयोगकर्ताओं को लॉग इन करने में सक्षम होने के लिए मैंने इसे न्यूनतम उदाहरण 2 तक सेट नहीं किया था)

1. At Services/Elastic Beanstalk/Configuration/Load Balancing 
    a. set Application health check URL: /health 
    b. left Session Stickiness: unchecked 
2. At Services/EC2/Load Balancers/Description/Port Configuration: 
    For both port 80 (HTTP) and 443 (HTTPS) 
     1. Edit and select 'Enable Application Generated Cookie Stickiness' 
     2. Cookie Name: JSESSIONID 
1

मैं समान वातावरण में वही समस्या का सामना करना पड़ा, जहां सामने के छोर https पर और पीछे फ़ायरवॉल grails सर्वर http पर था: में और रहने में लॉग इन किया है, मैं एडब्ल्यूएस पर निम्नलिखित किया था। जब सत्र का समय समाप्त हो गया था, AJAX और कोणीय $ http http://myclient.com/myWar/login/auth पर रीडायरेक्ट संदेश प्राप्त करने के लिए उपयोग किया जाता था। यह पुनर्निर्देशन अनुरोध ब्राउज़र में पहुंच से वंचित होने का कारण बनता है क्योंकि मूल यूआरएल https था और मिश्रित सामग्री अक्षम थी। मुझे SCRIPT7002 प्राप्त होता था: XMLHttpRequest: नेटवर्क त्रुटि 0x80700013, 80700013 त्रुटि के कारण ऑपरेशन को पूरा नहीं कर सका। " यह त्रुटि केवल उत्पादन में हुई थी, न कि परीक्षण वातावरण में।

फिक्स सरल है, बस कॉन्फ़िगरेशन फ़ाइल में निम्न जोड़ें। grails.serverURL = "https://mywebsitespublicaddress.com/myWar"

संबंधित मुद्दे