2017-11-16 4 views
0

나머지 api의 보안을 위해 JWT 토큰을 사용 중입니다.여러 서버 인스턴스에서 실행중인 분산 시스템 용 JWT 토큰

사용자가 로그인 할 때 DB로 사용자의 자격 증명을 확인하십시오. 우리가 사용자의 사용자가 보낼 때 우리가 그들을 일치 할 수 있도록 우리는 어딘가에 비밀을 유지할 필요가 토큰을 일치시키기 위해 지금 토큰

를 만들 JWT에 전달 후 추가 보안을 위해 암호화되어 일치하는 경우

로그 인한 후 모든 요청

우리는 할 수 있습니다. 1. 데이터베이스에 보관하십시오. 나머지 호출은 데이터베이스에있는 토큰으로 체크 토큰을받습니다. 나머지 호출마다 너무 비쌉니다. 2. 어딘가에 비밀을 유지하십시오. JVM을 사용하십시오. 여기 패키지

나오는 javax.servlet.http.HttpServletRequest

// 내 주요 이슈 코드

// Encrypt it 
    Key key = keyGenerator.generateKey(password); 
    jwtToken = Jwts.builder() 
      .setSubject(username) 
      .setIssuer(uriInfo.getAbsolutePath().toString()) 
      .setIssuedAt(new Date()) 
      .setExpiration(toDate(LocalDateTime.now().plusMinutes(1))) 
      .signWith(SignatureAlgorithm.HS512, key) 
      .compact(); 

// 세션에 세부 사항을 추가

HttpSession httpSession = currentRequest.getSession(); 
httpSession.setAttribute("userSecret", password) 

에서 HttpSession을 시도 이것은 단일 서버 인스턴스에서 잘 작동합니다.

하지만 어느 시점에서 우리는 서버를 확장하고 여러 인스턴스를 실행해야합니다. 우리는 사용자가 1 개 인스턴스를 사용하여로드 밸런싱을 사용하여 다른 인스턴스를 사용하여 나머지 통화를 제공 할 수 있습니다 로그인 할 수있다이 사건을 처리하려면 어떻게

. 사용자 비밀로

는 첫 번째 서버의 JVM에서 사용할 수 있습니다.

답변

1

당신은 서버 사이의 JWT를 암호화에 사용 된 개인 키를 공유 할 수 있습니다. 서버가 API 호출을 받으면 private key을 사용하여 JWT의 암호 해독을 시도 할 수 있습니다. 암호 해독이 성공하면 유효한 JWT가 있고 요청을 처리 할 수 ​​있습니다. 해독에 실패하면 이는 잘못된 JWT임을 의미합니다. JWT가 생성되면 데이터베이스에 접근 할 필요가 없습니다. 제 의견으로는 이것이 JWT의 주요 용도입니다. userSecret의 의미를 모르겠습니다.