2017-10-31 8 views
1

우리는 파이썬 병 플라스크 백엔드로 반응 애플리케이션을 개발 중입니다. 일반적으로 모두 잘 작동하지만 클라이언트 측 인증서 요구 사항이있는 서버 뒤에 배치하면 거의 작동합니다. Chrome에서는 잘 작동하지만 Firefox에서는 제대로 작동하지 않습니다.클라이언트 측 인증서 javascript 요청

인증서는 브라우저에 URL을 입력 할 때 전송되며, 요청에 응답 할 때 전송되지 않습니다.

  1. 기본 요청이 정상적으로 완료되면 페이지가 표시됩니다.
  2. 페이지를로드 할 때 백엔드/백엔드/버전에 요청합니다.
  3. 그 요청의 nginx가
    <html> 
     
    <head><title>400 No required SSL certificate was sent</title></head> 
     
    <body bgcolor="white"> 
     
    <center><h1>400 Bad Request</h1></center> 
     
    <center>No required SSL certificate was sent</center> 
     
    <hr><center>nginx/1.10.3</center> 
     
    </body> 
     
    </html>

말과 실패

    나는 DevTools로를 열고 같은 URL을 붙여 넣을 때
  1. , 그것은 잘 작동합니다. 클라이언트 측 인증서는 브라우저에서 전송됩니다. 무엇을 실종

    const fetchVersion =() => (dispatch, getState) => { 
        return dispatch({ 
        [CALL_API]: { 
        endpoint: `${API_ROOT}/version`, 
        method: 'GET', 
        headers: { 
         "Authorization": authHeader(), 
        }, 
        types: [FETCH_VERSION_REQUEST, 
         { 
         type: FETCH_VERSION_SUCCESS, 
         payload: (action, state, res) => { 
          const contentType = res.headers.get('Content-Type'); 
          if (contentType && ~contentType.indexOf('json')) { 
          return res.json().then(json => json.response); 
          } 
         }, 
         }, 
         { 
         type: FETCH_VERSION_FAILURE, 
         meta: (action, state, res) => checkIfInvalidToken(action, state, res, dispatch), 
        } 
        ], 
        }, 
    }); 
    }; 
    

    : 우리가 요청을 어떻게

? Chrome이 요청한 것처럼 요청에 Firefox가 인증서를 첨부하지 않는 이유는 무엇입니까?

+0

이 나에게 보이는이 https://stackoverflow.com/questions/24005354/ssl-client-certificate-not-loaded-on-ajax-call-from-firefox? –

답변

1

당신은 문제가 명시 적으로 the documentation 기본값은 omit하지만 파이어 폭스는 항상 심지어 출처 간 통화, 쿠키를 전송 include 필요에 따라 include

[CALL_API].credentials 값을 지정하여 해결되었는지 확인하기 위해 시도 할 수 있습니다. 나는 당신이 크롬과 파이어 폭스에이 모두를보고 비슷한 동작을 재현 생각 순수 실험 목적으로 실험실에서

[CALL_API]: { 
    endpoint: `${API_ROOT}/version`, 
    credentials: 'include', 
    method: 'GET', 
    headers: { 
     "Authorization": authHeader(), 
    }, 
...and so on 

: 당신의 질문의 예에 대해서는

, 코드 같은 것을 될 수 실험실 credentials: 'include'은 문제를 해결합니다 : video available here.

+0

과 [fetch()]가 SSL 클라이언트 인증이있는 Firefox에서 실패합니다. (https://stackoverflow.com/a/39417601/1657028) –

+0

이 완벽하게 작동합니다. 하지만 dev에 모드를 휴식하지만 쉽게 플래그로 고정이야. – dutt