2016-08-27 5 views
1

나는 nodejs에서 ajax 요청을 통해서만 통신하는 API에 대한 보안 토큰을 구현했다.
각 요청시 보안 토큰이 전송됩니다.이 토큰이 있으면 새 인증서가 생성되어 헤더를 통해 응답으로 전송됩니다.
존재하지 않으면 403으로 응답이 끝납니다. 로그인 자격 증명이 전달되지 않은 경우입니다. 나는 동시에 두 개의 요청을 시작할 때nodejs의 보안 유효 기간 토큰

문제는 둘 다 같은 보안 토큰을 보내, (의이 및 B을 가정 해 봅시다), 따라서 토큰을 업데이트 B 전에 종료 보다 앞에 B으로 전달 된 토큰은 A에 의해 무효화 되었기 때문에 무효입니다.

이 문제를 어떻게 극복 할 수 있습니까?
어떻게 다시 구현할 수 있습니까?

답변

0

두 부분으로 구성된 토큰을 사용할 수 있습니다. 하나는 클라이언트와 서버간에 공유하고 다른 하나는 외부 매개 변수를 기반으로합니다.
도 업데이트입니다.

예를 들어, 클라이언트와 서버가 t이라는 숫자 토큰을 공유하고 첫 번째 호출 (로그인, 사용자 작성, 원하는대로) 중에 해당 토큰에 동의한다고 가정 해보십시오.
토큰을 만들 때 카운터 c0으로 설정하고 현재 토큰 (또는 더 좋게 마지막으로 표시됨) 인 p = <t, c> 쌍을 만듭니다.
모든 요청에서 명시 적으로 토큰이나 카운터를 보내면 안됩니다. 클라이언트가 서버에 메시지를 보내려고

, 단계는 다음과 같습니다

  • 생성 된 토큰 v
  • 사용하여 요청을 보내기 <t,c+1>
  • 로 새로운 값 v = t*c
  • 업데이트 p 만들기

각 요청에는 고유 한 실제 토큰이 있습니다.

서버에 토큰을 확인하기 위해 단계는 :

  • 계산 수락 토큰aN의 집합은 다음과 같이
    • a0 = v*(c-N/2) (c' = (c-N/2))
    • a1 = v*(c-N/2+1)
    • ...
    • aN = v*(c+N/2-1)
  • 수신 토큰과 동일 aM가 존재하지 않으면, 요청이 접수 된 경우, 상기 요청
  • 을 수락 c'가 선택을 만드는 데 사용되는 경우, 그에 따라 카운터 서버 측 갱신 aM 현재 c

이 방법보다 더 큰, 동시 요청이 잘 처리하고 명시 적으로 토큰을 갱신 할 필요가 없습니다.

요청이 실패 할 때마다 클라이언트는 공유 토큰 t과 카운터 c을 어떻게 든 전용 끝점으로 재설정할지 결정할 수 있습니다.
서버는 계산 된 집합에 유효한 aM이없는 요청을 거부 할 수 있습니다.

물론 토큰을 어떻게 든 어딘가에 저장할 수 있어야합니다.

+0

답변 해 주셔서 감사합니다. – patentul

+0

@patentul 오신 것을 환영합니다. 그것이 당신의 필요에 맞는 것인지 알려주세요. 또한 반드시 솔루션으로 nodej에 바인딩되는 것은 아닙니다. – skypjack