사용자 인증을 위해 JWT 토큰을 사용하는 RESTful API를 작성 중입니다 ( login
끝점에서 발행하고 이후에 모든 헤더로 전송). 고정 된 시간 후에 토큰을 새로 고쳐야합니다 ( renew
끝점을 호출 하면 갱신 된 토큰을 반환합니다) ).
토큰이 만료되기 전에 사용자의 API 세션이 유효하지 않을 수 있으므로 모든 엔드 포인트가 1) 토큰이 여전히 유효하고 2) 사용자 세션이 여전히 유효한지 확인하여 시작합니다. 클라이언트가 토큰을 로컬에 저장하기 때문에 토큰을 직접 무효화 할 수있는 방법이 없습니다.
따라서 모든 엔드 포인트는 클라이언트에게 두 가지 가능한 조건을 알려야합니다. 1) 토큰을 갱신 할시기이거나 2) 세션이 유효하지 않아 더 이상 시스템에 액세스 할 수 없다는 것입니다. 두 가지 조건 중 하나가 발생할 때 내 엔드 포인트가 클라이언트에게 신호를 보내는 두 가지 대안을 생각할 수 있습니다 (클라이언트가 옵션 중 하나에 적합하다고 가정).
- 세션이 유효하지 않은 경우 http 401 코드 (권한 없음)를 반환하거나 토큰이 만료되어
renew
엔드 포인트 를 호출해야 할 때 412 코드 (전제 조건 실패) 를 반환하면 200 (ok) 코드가 반환됩니다. - 세션이 유효하지 않거나 토큰이 만료되었음을 알리기 위해 401을 반환합니다. 이 경우 클라이언트는 즉시
renew
엔드 포인트를 호출하고 200을 리턴하면 토큰이 새로 고쳐 지지만renew
401을 리턴하면 클라이언트가 시스템 외부에 있음을 의미합니다.
위의 두 가지 대안 중 어느 것을 추천 하시겠습니까? 어느 것이 더 표준적이고 이해하기 쉽고 RESTful 한 것입니까? 아니면 다른 접근법을 모두 추천 하시겠습니까? 두 옵션 중 하나에 명백한 문제 나 보안 위험이 있습니까? 답변에 귀하의 의견을 뒷받침하는 외부 참조가 포함 된 경우 추가 포인트.
최신 정보
여러분, 실제 질문에 집중하십시오- 갱신 / 세션 무효화를 알리는 두 가지 http 코드 대안 중 가장 좋은 것은 무엇입니까? 내 시스템이 JWT 및 서버 측 세션을 사용한다는 사실을 염두에 두지 마십시오. 매우 구체적인 비즈니스 규칙에 대한 API의 고유성이며 도움을 요청하는 부분은 아닙니다.)