2017-11-08 1 views
0

저는 JWT를 사용하여 새로 왔습니다. 추가 요청을 위해 클라이언트가 인증되도록 JWT를 생성하는 API가 있습니다. 내 JWT는 사용자 ID를 반환하는 속성이 있습니다 :클라이언트 쪽에서 JWT에 데이터 추가

{ 
    jwt: { 
    exp: "2017-12-12 00:00:00", 
    data: { 
     user_id: 491 
    } 
    } 
} 

내 질문 경우, API에 의해 생성 된 JWT를 디코딩과 같은 데이터 필드에 새로운 속성을 추가 할 수있는 클라이언트 :

{ 
    jwt: { 
    exp: "2017-12-12 00:00:00", 
    data: { 
     user_id: 491, 
     status: 1 
    } 
    } 
} 

또는 상태 필드가 기본값으로 설정된 API 인증 시스템에서 JWT를 생성 할 수 있다면 클라이언트가이를 변경할 수 있습니다.

감사합니다.

답변

0

클라이언트가이를 수행 할 수 있지만 토큰이 유효하지 않게됩니다. 예를 들어 페이로드의 콘텐츠를 변경하면 다른 필드를 추가하거나 내용을 변경하면 토큰의 서명이 더 이상 일치하지 않습니다. API가 유효하지 않은 서명으로 토큰을 수신하면 토큰을 거부해야합니다. 필드가 isAdmin이고 클라이언트가 false에서 true으로 변경할 수 있다고 가정 해보십시오. 그것은 인증을 무의미하게 만들 것입니다. 클라이언트는 관리자인지 여부를 결정하지 않고 백엔드가 결정합니다.

토큰의 페이로드가 변경되면 서명을 다시 작성해야합니다. 토큰에 서명하려면 클라이언트가 비밀 키 (H256 용)를 알아야합니다. 그러나 클라이언트는 비밀 키를 알지 못합니다.

따라서 대답은 아니오입니다. 클라이언트는 토큰을 변경할 수 없습니다.

자세한 내용은 here을 참조하십시오. 즉

+0

그래서 값을 변경할 수있는 필드를 사용하는 유일한 방법은 내 API에서 데이터베이스를 통해 직접 수행하는 것입니다. 즉 사용자가 요청하면 내 API가 DB에 쿼리하여 해당 사용자의 상태를 확인해야합니다. 또는 제안 할 수있는 또 다른 해결 방법이 있습니까? – lbpeppers

+0

토큰의 내용이 변경되지 않은 것이 가장 좋습니다. 즉, 백엔드가 초기 토큰을 발행 할 때 DB에서 토큰에 필요한 모든 것을 가져와야한다는 것을 의미합니다. 초기 토큰을 만든 후에 토큰의 페이로드를 변경하려면 백엔드에서 새 토큰을 만들어 클라이언트에 발행해야합니다. – MikaS

+0

흠 ... 그게 최선의 접근 방법이 아닌 것 같아. API 인증에 대한이 주제에서 상당히 새로운 것 같아. 내가 무엇을해야하는지 더 알기 위해 연구해야 할 것 같아. 감사. – lbpeppers

1

, 당신은 JWT 토큰와 변조하려는 당신은 토큰를 무효화하지 않고 그것을 할 수 없습니다.

서명은 헤더 및 페이로드에 대해 계산됩니다. 토큰 발급자 (서버)는 서명을 검사하여 내용이 변경되지 않았 음을 확인합니다.

관련 문제