차이 토큰, 쿠키 및 세션

이 문서 이동  http://blog.csdn.net/tobetheender/article/details/52485948

인터페이스 테스트를하고, 우리는 종종 토큰 요청 매개 변수의 유형을 발생하지만, 대부분의 테스터 토큰, 쿠키를 구별 할 수있다 세션은 여전히 ​​조금 이해된다.

쿠키는, 데이터를 영구적으로 저장할 수있는 브라우저를 의미, 매우 구체적인 일이 단순히 브라우저 구현의 데이터 저장 기능입니다.

브라우저로 전송하는 서버에 의해 생성 된 쿠키, KV 양식 디렉토리에 텍스트 파일로 저장 브라우저 쿠키, 서버에 같은 사이트를 요청하는 다음 번에 쿠키를 전송합니다. 쿠키가 클라이언트에 존재하기 때문에, 브라우저는 쿠키가 악의적으로 사용되지 않습니다 보장하기 위해 몇 가지 제한 사항을 추가하지만 너무 많은 디스크 공간을 차지하지 않으므로 도메인 당 쿠키의 수는 제한됩니다.

세션

말 그대로 세션은 세션이다. 이것은 사람에게 당신과 이야기와 비슷합니다, 당신은 어떻게 당신이 현재와 조 스미스 이야기를 알고,하지 홍길동은 무엇입니까? 다른 특성 그가 조 스미스입니다 (외관 등)이 있어야합니다.

세션이 비슷한 이유, 당신이 그의 yes로 요청을 누가 알고 싶은 현재의 서버입니다. 각 클라이언트에 대해 다른 서버로 이동이 구별을하기 위해 서버에 클라이언트의 "정체성"에 넣어 시간을 요청할 때마다 보낸 다음 "정체성"을 할당하고, 서버는 요청을 보내는 것을 알고있다 누가했다. 이 "정체성"을 저장하는 방법을 클라이언트로 브라우저 클라이언트를 위해, 우리는 기본 쿠키 방식을 사용하고, 다양한 방법이있을 수 있습니다.

사용자의 세션 정보가 일시적으로 서버에 저장되어있는 서버의 사용은, 사용자 세션이 사이트를 떠난 후 파괴됩니다. 이 사용자 정보는 쿠키가 더 안전 상대적으로 저장되지만 세션이 결함을 가지고 : 웹 서버로드 밸런싱, 세션이 손실됩니다 다른 서버로 다음 다음 작업 요청을 할 경우.

토큰

토큰의 도입 : 토큰 자주 자주 데이터베이스 서버는 사용자 이름과 암호를 쿼리, 클라이언트에서 서버에 데이터를 요청하고 사용자 이름과 암호를 결정하기 위해 비교 올바른지,이 컨텍스트 토큰에서 적절한 지시를하게됩니다 그들은 존재로왔다.

토큰 정의 : 토큰은 로그인 처음으로, 서버가 후에 만, 클라이언트에 클라이언트를이 반환하는 토큰 토큰을 생성하는 요청 클라이언트에 토큰으로, 캐릭터의 서버에서 생성 된 문자열 사용자 이름과 암호를 다시 가져올 필요없이 요청 데이터에 와서이 문제를 가지고 토큰이 필요합니다. 진수 문자 토큰을 일정 길이로 압축 할 수있는 몇 가지 전 소금 + 해시 알고리즘에 의해 UID (사용자의 고유 ID), 시간 (현재 시간의 타임 스탬프), 기호 (서명 : 구성된 토큰 간단한 문자열, 악의가있는 제 3 자에 방지 할 수있는 접합 요청 토큰 서버).

토큰 사용하는 목적 : 토큰의 목적은 자주 쿼리를 데이터베이스,보다 강력한 서버를 줄이고, 서버에 압력을 완화하는 것입니다.

 

기존의 인증

HTTP는 상태가없는 프로토콜입니다, 그것은 응용 프로그램에 액세스 누구인지하지 않는 것입니다. 여기에 우리가 클라이언트로 사용자를 넣어, 클라이언트는 물론 암호 인증 등으로 사용자 이름을 사용하지만 다음 번에 클라이언트는 확인해야 할 때 다시 요청을 보냅니다.

이 솔루션은 사용자가 로그인을 요청하면 아무 문제가없는 경우, 우리는 서버 측에서 기록을 생성한다는 것입니다, 당신은 클라이언트를 넣어 사용자가 로그에 대해 누가 설명하고 레코드의 ID 번호를 보낼 수있는이 기록, 당신이 서비스 할 수있는 경우에 클라이언트는 사용자가 ID 번호를 저장하는 요청을 전송 다시 다음 번 쿠키, 서비스를받은 후 서버가 쿠키이의 정보를 확인합니다, 그래서 당신이 쿠키를 취할 수 있습니다 참조 여기에서 해당 레코드가 발견되고, 따라서 사용자에게 지시하는 것은 인증 된 경우, 사용자는 클라이언트에 반환되는 요청 데이터를 입력 종료한다.

세션은 우리가 세션 메모리, 디스크 또는 데이터베이스에 저장 될 수있는 사용자가 세션을 저장하는 서버에 기록되어 생성해야, 위라고합니다. 분명이 세션 만료에 우리는 정기적으로 서비스를 종료해야 할 수도 있습니다.

토큰 기반 신원 확인

서버에 기록 된 토큰 기반 인증 방법, 로그온을 사용하는 사용자를 저장할 필요가 없습니다. 아마 과정이 있습니다 :

  • 클라이언트는 암호 요청과 사용자 로그인 이름을 사용합니다
  • 서버는 사용자 이름과 암호를 확인하기 위해 요청을 수신
  • 인증이 성공하면, 토큰을 발급합니다 서버가 다음 토큰은 클라이언트로 전송
  • 클라이언트 토큰을 수신 한 후이를 그러한 쿠키 내부 또는 로컬 스토리지에 같이 저장 될 수있다
  • 때마다 클라이언트 토큰 발급 서버와 서버의 필요에 리소스를 요청
  • 데이터 서버는 요청을 수신 한 다음 인증이 성공하면, 그것은 클라이언트의 요청에 반환되는 클라이언트가 토큰과 함께 내부 요청 있는지 확인

APP 로그 서버에 암호화 된 사용자 이름 및 패스워드를 송신하면, 서버가 성공적인 경우 예컨대 토큰으로서 임의로 생성 된 32 비트 열로서, 어떠한 방법으로, 사용자 이름 및 패스워드를 인증 서버에 저장되고, 복귀 APP에 토큰 APP 후 요청이있을 때 우리는, 서버 측 검증 토큰이 토큰을 가져와야한다 곳에, 필요한 사람에게 성공적으로 오류 메시지를 반환 그를 다시 로그인하게 실패, 원하는 결과를 반환 확인합니다. 서버가 유효한 토큰을 제공하며, 토큰마다 APP 인증과 요청이 유효하다.

그래서, 여기 내 질문 : 데이터베이스 서버 1에 저장된 토큰은, 각 쿼리는 매우 많은 시간이 소요되지 않습니다. 데이터베이스에 저장하지 않으면 곳으로이를 보관해야합니다. 2. 클라이언트는 확실히 얻을 수있는 토큰을 저장 다시 토큰을 보낼 때 복호화, 암호화. 데이터베이스 또는 구성 파일 안에 저장된?

토큰은 내가이 일이 중요하지 않습니다, 휘발성 데이터, 더 많은 사용자가 자주 웨이 보에 대해 다시 로그인 나를 어쨌든, 다시 로그인 할 수 이상의 손실 아무것도입니다.
당신이 일반 데이터베이스 테이블이 거의 MSSQL / MySQL의 메모리 테이블을 넣을 수 있습니다 (그러나 메모리 테이블 성능 MySQL이 제한 강화라고합니다)라고 생각하면 그래서, 당신이 정말로 말 (에 Memcache를 넣을 수 있습니다, 이것은 매우 일반적인 전략이다 당신은 레디 스 년을 넣을 수 있습니다) (I이 달성하기 위해)을 해봤에도 변수 사전 OpenResty의 (같은 당신이 신뢰하지 버스트 메모리)을 같이 넣을 수 있습니다.

토큰이 슬립했지만, 다시 돈을 지출 티켓 손실 티켓보다 더 부드러운, 캔에 자신의 재 토큰 인증 작업을 잃고, 따라서 손실 된 토큰의 비용은 허용 될 수 - 당신이 잃을 너무하지 않는 제공 자주, 그리고 당신은 사용자 경험의 손실을 버스트하면 사용자가 인증 할 수있는 경우.

당신은 데이터베이스 쿼리 시간이 토큰을 유지하기 위해 생각한다면이 시작하는 점을 바탕으로, 너무 오래, 그것은 병목 현상이나 시스템을 위험합니다, 당신은 그들의 메모리를 넣을 수 있습니다.
memcached를 같은 레디 스, KV의 방법은 귀하의 요구 토큰 쿼리에 적합합니다.
이것은 너무 많은 메모리, 토큰 등 (32)의 문자열이없는 경우에 가입자 얼마나 많은 메모리를했다 백만 ~ 10 백만.
독립형 메모리로 많은 양의 데이터가 실제로 수행, 또는 모든 라인에 다른 시스템에 할당에서 토큰 생성이 충분히 균일 높고 낮은 컷만큼 큰 위험을 잃고 아래로 느낄 수없는 경우, 메모리는 문제가되지 않습니다.

이것의 클라이언트 측면은 매우 안전한 방법이없는 경우는, 그러한 개인 데이터 스토리지 운영 시스템으로, 그것은 확실히 문제가 토큰 누수가 될 것입니다. 예를 들어, 나는 휴대 전화를 가지고는 사용자의 신원에 만료 전에, 당신은 다른 곳에서 로그인 할 수 있습니다 토큰 사본을 넣어.
이 문제에 대한 간단한 해결책
대칭 암호화 토큰 저장소에 저장된 1 잠금 해제 시간을 사용한다.
2, 요청 URL, 타임 스탬프 토큰 병합 세 소금 서명, 서버 검증 효과.
두 방법의 시작점은 다음과 같습니다보다 쉽게 저장된 데이터를 도용하고 프로그램이 서명과 암호화 및 복호화 알고리즘은 더 어렵다 해킹 분해. 그러나 어려운 사실은 결국 신사 있도록, 안티 - 안티 - 악당 관행없는 어렵다. 당신은 스프레이 ...... 일반 텍스트로 저장되지 않습니다 볼 발톱 클라이언트 경우 암호화되어 저장 속담
이 비구 속성 암호문 저장 얻을 방법을, 당신의 방법 서명 알고리즘과 소금이 될 수 있습니다 둘을 모르는 결합 소비.
토큰이 떨어진 사람이 수갑을 한 경우, 그는 자연스럽게 또한 시간이 자신의 휴대 전화는 또한 사용자의 신원과 함께 사용할 수 있습니다 때, 당신 장님 것, 자신의 휴대 전화에 이식 될 수있다.
우리는 사용자가 만들 수 있습니다 제공 할 수 있도록 유사한 이니셔티브는 도난시 원격으로 중지 과거 토큰 메커니즘을 만료됩니다.

네트워크 레벨 이상의 맑은 전송 토큰, 다음 HTTPS를 사용하고, 이후 신체 내부의 토큰을 추천해야하므로 매우 위험 할 것입니다.

 

그는 추가 :

쿠키와 세션의 차이

1, 쿠키 데이터는 서버에, 클라이언트에서 세션 데이터를 저장된다.

2, 쿠키 사람들이 로컬로 저장 분석 할 수 COOKIE COOKIE 속임수와 매우 안전하지 않습니다
   세션을 사용해야 계정 보안을 고려.

3 세션은 일정 기간 내에 서버에 저장됩니다. 증가를 액세스하는 더 될 서버의 성능을 차지할 때
   계정 완화 서버 성능에 걸릴, 당신은 쿠키를 사용합니다.

4, 저장된 데이터는 4K를 초과 할 수 없습니다 하나의 쿠키는, 많은 브라우저가 쿠키를 저장 20 개 사이트의 최대 제한됩니다.

5, 그래서 개인 권고 :
   로그인 정보 및 기타 중요한 정보는 SESSION로 저장되어
   필요가 COOKIE에 배치 할 수있는 경우 추가 정보

 

세션 토큰 차이점

  토큰 세션과 각 요청의 서명도 도청을 방지하고 공격을 재생하고, 세션 통신의 보안을 보호하기 위해 링크 계층에 의존해야하기 때문에, 더 나은 세션보다 인증 토큰 보안 등, 모순되지 OAuth를. 위에서 언급 한 바와 같이이 상태 세션을 구현해야하는 경우, 당신은 여전히 ​​서버 측에서 상태의 일부를 저장하는 세션을 증가시킬 수있다

  응용 프로그램은 일반적으로 서버와 편안한 API를 다루는. 나머지 논리 API 서버 처리하여 세션을 저장하는 쿠키, 충분히 자신을 표시하는 토큰 따라서 세션, 세션 / 상태와 같은 응용 프로그램 브라우저처럼없는 상태 비 저장입니다. 당신은 나머지 API의 무 백엔드하지 않은 경우, 당신은 응용 프로그램에 세션을 저장해야 할 수 있습니다. 웹킷은 쿠키 세션을 관리 할 수있는 숨겨진 브라우저, 응용 프로그램에 포함 할 수 있습니다.

  HTTP 세션은 저장 메커니즘 제공 영속 객체의 상태 비의 HTTP에 대한 메커니즘입니다. 시간이 안전한 것으로 간주되고에 대한 인증의 소위 세션은 단순히 때문에 SID의 예측 불가능 성으로, 사용자 세션에 대한 정보를 저장. 이 인증 수단이다. 그것의 OAuth 토큰 또는 유사한기구를 지칭 할 때 토큰이, 그리고, 인증 및 권한 부여를 제공하는 인증은 사용자, 애플리케이션이 허가된다. 그 목적은 정보 앱 사용자에 대한 접근의 권리를 허용하는 것입니다. 토큰은 여기에 고유합니다. 앱에서 다른 전송 될 수 없습니다, 당신은 다른 사용자에 갈 수 없습니다. 돌아서 및 세션을 말한다. 세션 간주이 SID는이 사용자의 모든 권리를 가지고 있음을, 단 하나의 간단한 인증을 제공합니다. 이 데이터의 엄격한 기밀 유지의 필요성은 역 광장에 보관해야합니다, 당신은 다른 사이트 또는 타사 응용 프로그램과 공유 할 수 없습니다. 단순, 사용자 데이터의 경우 지금과 토큰으로, 타사의 점유율을 필요로하거나, 통화 API 인터페이스에 타사을 허용 할 수 있습니다. 당신이 만약이 문제가 아니라 무엇을 항상 당신의 자신의 웹 사이트, 자신의 응용 프로그램.

 

오해 브레이크 :

"그냥 브라우저를 닫고 세션이 사라졌다?"

잘못된. 세션을 삭제하는 서버 통지 프로그램, 그렇지 않으면 서버가 남아 않는 한 세션의 경우, 절차는 일반적으로 삭제 세션에 명령을 실행할 때 로그 오프 사용자로 수행됩니다.

그러나 브라우저가 서버가 브라우저를 알 수있는 기회가되지 않도록 폐쇄 된, 닫기 전에 종료 서버를 알리기 위해 주도권을 쥐고하지 않을 것 같은 환상이 이유는, 대부분의 세션 메커니즘은 세션 ID를 저장하기 위해 세션 쿠키를 사용한다는 것입니다 , 브라우저는이 세션 ID가 사라진 후 다시 서버에 접속을 할 때, 당신은 원래 세션을 찾을 수 없습니다 닫힙니다. 쿠키 HTTP 서버 설정은 하드 디스크에 저장하거나 서버에 원래 세션 ID를 전송, 브라우저가 요청 헤더를 만들어 다시 몇 가지 방법을 사용하는 경우, 여전히 다시 원래 세션을 열 수 브라우저를 엽니 다.

세션에서 발생하지 않는 브라우저를 닫으면 삭제 되었기 때문에 정확하게, 서버를 강제하는 세션에 실패 시간을 설정, 세션이 처음이 실패를 통해 수시로 클라이언트에서 사용하는 경우, 서버는 클라이언트가 활동을 중단했다고 할 수있다 세션은 저장 공간을 절약하기 위해 삭제됩니다.

추천

출처www.cnblogs.com/ella-li/p/12008069.html