0

Live Server에서 OneLogin Saml 인증이 작동하고 AWS로드 밸런서 설정에 문제가 있습니다. 문제는 AWS 와일드 카드 HTTPS 인증서를 사용하여 포트 80과 443 모두에서 수신 대기하는 클래식로드 균형 조정기가 있다는 것입니다. 로드 밸런서는 두 포트를 내 서버의 포트 80으로 전달하고 HTTP_X_FORWARDED_PROTO 헤더를 추가합니다.AWS로드 밸런서가있는 Onelogin SAML

부하 분산 장치가 아닌 일반 Dev 서버를 사용할 때 SAML 인증이 정상적으로 작동합니다. 나는 적절한 응답을 되찾고있다. 그러나 살기 위해 살짝 누르면 SAML 응답은 RELAY STATE없이 빈 POST 사전을 반환합니다.

POST가 비어있는 이유는 무엇입니까?

내 설정은 다음과 같습니다 데브 서버에서 SAML 커넥터

  • 작품 벌금

    • 파이썬 사회적 인증은
    • 나는 방화벽 뒤에 내 라이브 서버를 사용하여 응답이 비어

    SSL 인증서 나로드 밸런서가 443을 추가 헤더가있는 포트 80에서 서버로 전달하는 것과 관련이 있다고 생각합니다.

    def _create_saml_auth(self, idp): 
        """Get an instance of OneLogin_Saml2_Auth""" 
    
        config = self.generate_saml_config(idp) 
        request_info = { 
         'https': 'on' if self.strategy.request_is_secure() else 'off', 
         'http_host': self.strategy.request_host(), 
         'script_name': self.strategy.request_path(), 
         'server_port': self.strategy.request_port(), 
         'get_data': self.strategy.request_get(), 
         'post_data': self.strategy.request_post(), 
        } 
    
        if 'HTTP_X_FORWARDED_PROTO' in self.strategy.request.META: 
         request_info['https'] = 'on' if self.strategy.request.META.get('HTTP_X_FORWARDED_PROTO') == 'https' else 'off' 
         request_info['server_port'] = self.strategy.request.META.get('HTTP_X_FORWARDED_PORT') 
    

    을하지만 여전히 Onelogin에서 SAML 응답에 empyy의 POST 사전을 반환하지 : 나는 전달 된 헤더를 분석하여 인증 요청을 만들어이 문제를 해결했습니다. 하지만 intial url은 HTTPS로 제대로 생성됩니다.

    비슷한 문제가있는 사람이 있습니까? 나는 붙어있어 Onelogin이 일하기를 좋아할 것입니다.

    감사합니다.

    건배,

  • 답변

    0

    당신은 오류가 무엇을 확인할 수 있습니다. 나는 다음과 같은 코드를 사용하고 있습니다 : 난 당신이 중 하나를 수행하는 것입니다 Authentication error: The response was received at http://... instead of https://...

    솔루션처럼 뭔가를 갈 것 내가했던 ELB와 같은 문제에 부딪 같은데요

    auth = OneLogin_Saml2_Auth(saml_req, saml_settings) 
        auth.process_response() 
    
        if not auth.is_authenticated(): 
         error = auth.get_last_error_reason() # here's the error message 
    

    을 https-> https 리디렉션 또는 pysaml이 https에서 응답을 수신했다고 생각하게하십시오. 여기에 어떻게 내가 해냈어 (장고 응용 프로그램이 경우에, 그러나 다른 환경에 대한 수정 정도로 쉬워야한다) :

    saml_req = { 
         'http_host': request.META['HTTP_HOST'], 
         'server_port': request.META['SERVER_PORT'], 
         'script_name': request.META['PATH_INFO'], 
         'get_data': request.GET.copy(), 
         'post_data': request.POST.copy() 
        } 
    
        if settings.SAML_FUDGE_HTTPS: # made a settings flag so it can be toggled 
         saml_req['https'] = True # this one forces https in the check url 
         saml_req['server_port'] = None # this one removes the port number (80) 
    
        auth = OneLogin_Saml2_Auth(saml_req, saml_settings) 
        auth.process_response() 
    

    업데이트 : @smartin이 주석에 언급로 - 당신은 할 수 있습니다 냄새 밖으로 HTTP_X_FORWARDED_FOR 헤더를 냄새와 설정을 만드는 것을 피하십시오

    +1

    이 스레드를 검토하십시오 : https://github.com/onelogin/python-saml/issues/75#issuecomment-108647017 – smartin

    관련 문제