모바일 앱을 만들고 있으며 인증에 JWT를 사용하고 있습니다.
이를 수행하는 가장 좋은 방법은 JWT 액세스 토큰을 새로 고침 토큰과 쌍으로 연결하여 원하는만큼 자주 액세스 토큰을 만료시킬 수있는 것 같습니다.
- 새로 고침 토큰은 어떻게 생겼습니까? 임의의 문자열입니까? 그 문자열이 암호화되어 있습니까? 다른 JWT입니까?
- 새로 고침 토큰은 액세스를 위해 사용자 모델의 데이터베이스에 저장됩니다. 맞습니까? 이 경우 암호화해야 할 것 같습니다
- 사용자 로그인 후 새로 고침 토큰을 다시 보낸 다음 클라이언트가 별도의 경로에 액세스하여 액세스 토큰을 검색하도록해야합니까?
답변
JWT 및 새로 고침 토큰에 관한 것이기 때문에 이것이 OAuth 2.0에 관한 것이라고 가정합니다 … :
-
액세스 토큰과 마찬가지로 원칙적으로 새로 고침 토큰은 설명하는 모든 옵션을 포함하여 무엇이든 될 수 있습니다. JWT는 Authorization Server가 상태 비 저장을 원하거나이를 제공하는 클라이언트에 일종의 “소유 증명”의미 체계를 적용하고자 할 때 사용할 수 있습니다. 새로 고침 토큰은 리소스 서버에 제공되지 않고 처음에 발급 한 권한 부여 서버에만 제공된다는 점에서 액세스 토큰과 다릅니다. 따라서 JWT-as-access-tokens에 대한 자체 포함 된 유효성 검사 최적화가 수행합니다. 갱신 토큰을 위해 보류하지 않음
-
이는 데이터베이스의 보안 / 액세스에 따라 다릅니다. 다른 당사자 / 서버 / 애플리케이션 / 사용자가 데이터베이스에 액세스 할 수있는 경우 예 (하지만 마일리지는 암호화 키를 저장하는 위치와 방법에 따라 다를 수 있습니다 …)
-
권한 부여 서버는 클라이언트가 토큰을 얻기 위해 사용하는 권한에 따라 액세스 토큰과 새로 고침 토큰을 동시에 발급 할 수 있습니다. 사양에는 표준화 된 각 보조금에 대한 세부 정보와 옵션이 포함되어 있습니다.
답변
다음은 JWT 액세스 토큰을 취소하는 단계입니다.
- 로그인시 클라이언트에 대한 응답으로 2 개의 토큰 (액세스 토큰, 새로 고침 토큰)을 보냅니다.
- 액세스 토큰은 만료 시간이 짧고 새로 고침의 만료 시간이 길어집니다.
- 클라이언트 (프런트 엔드)는 로컬 저장소에 새로 고침 토큰을 저장하고 쿠키에 액세스 토큰을 저장합니다.
- 클라이언트는 API 호출에 액세스 토큰을 사용합니다. 그러나 만료되면 로컬 저장소에서 새로 고침 토큰을 선택하고 인증 서버 API를 호출하여 새 토큰을 가져옵니다.
- 인증 서버에는 새로 고침 토큰을 수락하고 유효성을 확인하고 새 액세스 토큰을 반환하는 API가 노출됩니다.
- 새로 고침 토큰이 만료되면 사용자는 로그 아웃됩니다.
더 자세한 정보가 필요하면 알려주세요. 코드 (Java + Spring boot)도 공유 할 수 있습니다.
질문 :
Q1 : 만료 시간이 긴 클레임 수가 적은 또 다른 JWT입니다.
Q2 : 데이터베이스에 없습니다. 백엔드는 어디에도 저장되지 않습니다. 그들은 개인 / 공개 키로 토큰을 해독하고 만료 시간으로도 유효성을 검사합니다.
Q3 : 예, 맞습니다.
답변
새로 고침 토큰이있는 JWT의 Node.js를 사용한 이 구현을 기반으로합니다 .
1)이 경우에는 uid를 사용하며 JWT가 아닙니다. 토큰을 새로 고칠 때 새로 고침 토큰과 사용자를 보냅니다. JWT로 구현하면 JWT 내부에 있기 때문에 사용자를 보낼 필요가 없습니다.
2) 그들은 이것을 별도의 문서 (테이블)로 구현합니다. 사용자가 다른 클라이언트 응용 프로그램에 로그인 할 수 있고 앱별로 새로 고침 토큰을 가질 수 있기 때문에 의미가 있습니다. 사용자가 하나의 앱이 설치된 기기를 분실 한 경우 로그인 한 다른 기기에 영향을주지 않고 해당 기기의 새로 고침 토큰이 무효화 될 수 있습니다.
3)이 구현에서는 액세스 토큰과 새로 고침 토큰을 모두 사용하여 로그인 방법에 응답합니다. 이음새가 나에게 맞습니다.