지금은 oauth에 대해 논의하지 않겠습니다. 먼저 jwt를 이해하고 싶습니다
인증과 로그인 유지라는 두 가지 개념을 잘 이해하지 못합니다
현재 Android 및 iOS 클라이언트에 키 비밀을 제공하고 있으며, 내 서버에서도 이 비밀을 사용합니다.
그런 다음 타임스탬프, nonce 등 클라이언트의 매개변수가 내가 제공한 키와 일치합니다. 여러 매개변수가 하나의 매개변수 기호로 암호화됩니다.
그런 다음이 서버에 함께 전달되고, 서버는 처음 몇 개의 매개변수와 서버의 비밀번호를 암호화하고 최종적으로 클라이언트가 보낸 마지막 매개변수 기호
와 동일한지 확인합니다.하지만 이제 제가 한 위의 확인은 이 요청의 클라이언트가 내 서버의 비밀 키를 알고 있다는 것을 증명하는 것 뿐이라고 생각합니다. 즉, 이 요청이 내 서버에서 허용된다는 의미입니다.
하지만 아직 사용자가 로그인했는지 알 수 없기 때문에 클라이언트에 매개변수 토큰을 추가해 달라고 요청했습니다. 사용자가 로그인 인터페이스를 요청하고 성공적으로 로그인하면 세션을 redis에 저장하겠습니다. 한 달 후 토큰=sessionid를 반환하여 클라이언트에 저장하고 다음에 가져오면 Redis에서 이 세션을 찾을 수 있으면 해당 사용자가 로그인되어 있음을 증명합니다.
그리고 온라인에서 누군가가 커스텀 JWT라고 하더군요.
내가 한 일과 jwt의 가장 큰 차이점이 무엇인지 모르겠습니다
예를 들어 내 방법은 sessionid를 사용하여 사용자의 로그인 상태를 확인합니다
Jwt 잠시 정보를 읽어보니 클라이언트에 토큰을 발급한 후 서버가 토큰을 저장하지 않는 것 같습니다. 그러다가 클라이언트 매개변수가 도착한 후에는 단지 첫 번째 단계에 불과한 것 같습니다. 내 자신의 방법 (여러 매개 변수와 키를 암호화 한 후 서명하는 것과 동일합니까?) 그러나 이것이 이미 로그인을 증명할 수 있다고 말하는 것 같습니다. 그렇다면 내 방법은 중복되고 세션을 사용하여 로그 여부를 결정합니다.
?
https://jwt.io/
JWT의 특징 중 하나는 Stateless이며 로그인 개념이 없다는 점입니다.
원래 소위 로그인이라는 것은 인간이 이해하는 개념일 뿐이고, 서버에는 이런 개념이 없습니다. 로그인이란 무엇입니까? 승인된 접근(로그인해야만 접근 가능한 콘텐츠)으로만 가능합니다.
jwt는 토큰에 발급자, 사용자, 서명 및 기타 정보가 포함되어 있어 로그인을 증명하기에 충분하고 변조되지 않았기 때문에 서버 측에 토큰을 저장할 필요가 없습니다. 한 번 변조되면 서명을 확인할 수 없기 때문입니다. sessionid는 다릅니다. 세션은 주로 서버 측에 다른 데이터를 저장하는 데 사용됩니다. 이러한 데이터는 민감하고 jwt에 넣기가 불편할 수 있습니다. 물론 세션은 일종의 저장소일 뿐이며 Redis나 다른 유형의 저장소 시스템에도 저장할 수 있습니다. 실제로 쿠키를 토큰으로 생각할 수도 있으며(틀렸지만 이렇게 하면 더 잘 이해할 수 있습니다) 세션은 값 중 하나일 뿐이며 그 이상은 아닙니다.