2017-02-02 1 views
0

JWT를 nodej에서 수평 적으로 확장하는 적절한 방법은 무엇입니까? 토큰을 생성하려면 RSA을 사용하고 있습니다. 따라서 각 서버는 자체적으로 생성 된 토큰을 디코딩 할 수 있습니다. 모든로드 균형 조정은 상태 비 저장이므로 어떤 서버가 토큰을 생성했는지 알 수있는 방법이 없습니다. 내가 사용하고있는 현재 코드는 generateToken 기능은 이미지의 그들 모두에서 실행할 수수평 확장 Json-Web-Token 노드

helper['generateToken'] = (user)=>{ 
    return new Promise((fullfill,reject)=>{ 
    try{ 
     var cert = fs.readFileSync('pvt.key'); 
     var token = jwt.sign(user,process.env.SECRET); 
     fullfill(token); 
    }catch(ex){ 
     reject(new Error("Your token could not be generated")); 
    } 
    }); 
} 

다른 개인 키가 있습니다. 이것으로 확장하는 가장 좋은 방법은 무엇입니까?

그냥 보조 노트

i는 각각의 서버가 자체적으로 생성 된 토큰을 디코딩 할 수있을 것입니다 고정 표시기 떼

답변

1

에이 인스턴스를 실행하고 있습니다. 모든로드 균형 조정은 상태 비 저장이므로 은 토큰을 생성 한 서버를 알 수있는 방법이 없습니다.

... 그리고 이들 모두에는 다른 개인 키가 있습니다.

서버가 다른 서버에서 발급 한 토큰을받을 수 있으며, 동일한 서명 키를 사용할 필요가 당신이 발신자를 구별 할 수 없기 때문에.

대안

  • 주 (결과적으로 그것에 접근 보호) 공유 폴더 또는 데이터베이스를 사용하여 인스턴스 사이의 비밀 키

  • 사용하는 모든 공유하는 중앙 인증 microservice 인스턴스에 토큰 서명. 키 쌍이 사용되는 경우 서명 확인은 각 인스턴스에서 로컬로 수행 할 수 있습니다. 문제 :로드 밸런싱을해야합니다,하지만 당신은 키 공유의 복잡성

  • 테스트 가능한 모든 키 (매우 좋지 않아) 줄일 수 비대칭 키 쌍 (RSA)를 사용하고 가능한 모든과 토큰 서명을 확인 공개 키가 올바른지 확인하십시오

+0

'표준 사례'의 관점에서 모든 서버와 개인 키를 공유하는 것이 좋습니다. 나는 세션 기반의 토큰 기반 인증에 익숙하지 않으므로 같은 것을 구현하는 적절한 방법이 무엇인지 확실하지 않다. – georoot

+1

개인 키는 안전하게 보관되어야한다. 가상화, 백업 또는 복제와 같은 공동 작업은 항상 위험을 초래합니다. 하드웨어 토큰 (예 : HSM)을 사용하여 자체의 복제 및로드 균형 조정 메커니즘이있는 키를 저장할 수는 있지만 비용이 많이 듭니다 ... 따라서 메커니즘을 계획 할 때 전체 하드웨어 및 소프트웨어 시스템의 보안을 고려하십시오. 열쇠를 공유하다 – pedrofb