2017-02-01 2 views
0

웹 서버는 Stateless JSON API (로그인 단계 없음)를 구현합니다. 지금까지 우리의 모든 엔드 포인트는 POST 본문에 포함 된 인증 정보와 함께, - 단지 POST을왔다 :안전하게 REST API에 인증을 전송하는 방법은 무엇입니까?

POST /api/getData 
{ 
    "apiKey": "I5r8ccXa8BLgoO50iZpunOGyf0h5e28L1exNpV5m5LI" 
    "userId": "8A7tRggxWjyQ+grQIwkAswtaityHhtQm0NTFGD5wnmM=" 
    "passwordAuth": "p0/yv/Ptv8kOAY1k2NpR9EhwvGA/n/DF79JGaKJmF/k=" 
    "otpToken": "913012" 
} 

이것은 분명히 매우 REST-ful입니다하지 않습니다. 우리는 읽기 전용 요청에 대해 HTTP GET 요청을 사용하고 싶지만 다른 방식으로 인증 정보를 보내는 것을 의미합니다. 많은 가능성이 있습니다 :

  • URI에 넣으시겠습니까?
  • 쿠키에 넣으시겠습니까?
  • 사용자 지정 HTTP Authentication 헤더에 넣으시겠습니까?
  • 고유 한 HTTP 헤더를 만들었습니까?

어느 것이 더 낫습니까? 그 이유는 무엇입니까? 또는 POST 본문이 여전히 임의의 인증 정보를 전송하는 가장 안전한 방법입니까?

클라이언트는 일반적인 전화 앱이지만 하루는 브라우저 버전 일 수 있습니다. 모든 것은 HTTPS를 통해 실행됩니다. 암호 해싱 및 기타 암호화 물건이 클라이언트에서 실행됩니다 (우리의 응용 프로그램은 종단 간 암호화를 수행합니다).

답변

0

다섯 옵션은 기본적으로 작동하지만 각각 자신의 장단점을 제시 :

  • URI는 종종 로그에 결국의. URI에 중요한 정보가 포함되어 있으면 서버 로그를 삭제하거나 암호 데이터베이스와 동일한 보안 수준으로 처리해야합니다. 두 가지 옵션 모두 빠릅니다.
  • 브라우저는 요청할 때마다 자동으로 쿠키를 보냅니다. 공격자가 사용자를 속여 your-app.com/resetpassword 같은 URI를 방문하도록 유도하면 (예 : <img> 태그에 넣음) 요청이 완전히 인증됩니다. 공격자는 이것이 작동하려면 인 자격 증명을 알 필요조차 없습니다. 이를 CSRF 버그라고합니다.
  • 사용자 지정 Authentication 프로토콜은 실제로 HTTP 사양에서 허용되지만 많은 프레임 워크는 표준 메커니즘을 고려합니다. 이 길로 가면, 일을하기 위해 자신의 도구와 싸울 수 있습니다.
  • 일반적으로 사용자 정의 헤더가 사용 가능합니다. 많은 CSRF 보호 기술은 구현을 위해 X-Csrf-Token과 같은 사용자 지정 헤더에 의존하며 광범위한 호환성 문제는 없습니다.

이 모든 것을 감안할 때 사용자 지정 HTTP 헤더가 응용 프로그램을위한 방법 일 수 있습니다.

관련 문제