Django의 쿠키, 세션, Token
Django cookie: response.set_cookie( , ,max_age= ),
Django cookie: request.COOKIE.get( )
Session: 클라이언트가 서버에 있는 신분 표식은 무상태의 지속적인 메커니즘으로 저장 공간이 필요합니다.session은 쿠키에 의존하여 존재하고 값을 감별하는 형식으로 서버에 저장되며 내용은 암호화됩니다.
저장 방법:
1.관계형 데이터베이스
2.캐시--- 로컬 메모리
Django session, redis
1. setting.py
2. :request.session[ ]=
3. :request.session.get( )
sesion의 저장 및 가져오기 흐름도
: A ====>1. session, session["name"] = "AAA"
2. ( )
3. redis =====> :
:
: :{"name":"AAA"} # redis name:AAA
4. cookie ===> :
:session_id
: ( )
5. session
: cookie
: , cookie ( session_id)
====>1. cookie, session_id
2. session_id
3. , , redis ( {"name":"ywk"})
4. , session
JWT: 사용자가 등록하거나 로그인한 후에 우리는 사용자의 로그인 상태를 기록하거나 사용자를 위해 신분인증의 증빙을 만들고 싶습니다.우리는 더 이상 Session 인증 메커니즘을 사용하지 않고 Json WebToken 인증 메커니즘을 사용합니다.
JWT를 사용하는 이유:
Http 프로토콜은 무상태 프로토콜이기 때문에 만약에 사용자가 우리 응용 프로그램에 사용자 이름과 비밀번호를 제공하여 사용자 인증을 한다면 다음 요청을 할 때 사용자는 다시 사용자 인증을 해야 한다. http 프로토콜은 어느 사용자가 보낸 요청인지 알 수 없기 때문에 응용 프로그램이 어느 사용자가 보낸 요청인지 식별할 수 있도록 서버에 사용자 로그인 정보를 저장할 수 있다.이 로그인 정보는 응답할 때 브라우저에 전달되고 쿠키로 저장되어 다음 요청 시 사용자가 응용 프로그램에 접근할 때 요청이 어느 사용자로부터 왔는지 식별할 수 있도록 합니다. 이것이 바로session 인증을 사용하는 이유입니다.
그러나 서로 다른 클라이언트의 증가로 인해 독립된 서버는 더 많은 사용자를 불러올 수 없고session을 사용하면 더 많은 문제점을 드러낼 수 있다. 예를 들어
확장성: 사용자가 인증한 후에 서버에서 인증 기록을 하면 기록은 메모리에 저장되고 사용자가 다음에 요청할 때 이 서버에서 권한을 부여받은 자원을 받아야 한다. 이렇게 하면 분포식 응용에서 부하 균형기의 능력을 제한하고 필요한 확장 능력을 제한한다.
CSRF: 도메인 간 위조 요청, 브라우저의 쿠키 캡처, 악성 요청 전송
이럴 때는 토큰의 감권 메커니즘을 사용해야 돼요.
Token: 서비스 측에서 생성한 문자열은 유일한 표지가 있다.사용자가 처음 로그인한 후 서버에서 Token을 생성하여 이 Token을 클라이언트에게 되돌려줍니다. 나중에 클라이언트가 다시 데이터를 요청할 때 이 Token만 가지고 가면 사용자 이름과 비밀번호를 다시 가지고 갈 필요가 없습니다.
프로세스:
1.사용자 이름 및 암호를 사용하여 서버 요청
2.서버에서 사용자 정보 확인
3.서버가 인증을 통해 사용자에게 token을 보냅니다
4.클라이언트가 Token을 저장하고 요청할 때마다 이 Token 값을 첨부합니다
5.서비스 측에서 Token을 검증하고 데이터를 되돌려줍니다
JWT의 구성: 헤드(headler) 하중(payload) 비자(signature), 헤드는 HMAC SHA256의 알고리즘으로 암호화하고 나머지 2개는 base64의 알고리즘으로 암호화한다.
JWT 사용: Django에서 Django REST 프레임워크 JWT 확장을 사용하여 수행합니다.
문서 웹 사이트:http://getblimp.github.io/django-rest-framework-jwt/
다음 절차를 따르십시오.
1. 설치:
pip install djangorestframework-jwt
2. 구성:
# :JWT session
'DEFAULT_AUTHENTICATION_CLASSES': (
# jwt
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
# admin session
'rest_framework.authentication.SessionAuthentication',
),
}
# 10
JWT_AUTH = {
# timedelta
'JWT_EXPIRATION_DELTA': datetime.timedelta(hours=10),
}
사용자 대상을 만들 때 수동으로 Token을 생성합니다
from rest_framework_jwt.settings import api_settings
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
4. 서열화에서 필드 추가 토큰을 정의합니다
from rest_framework_jwt.settings import api_settings
#
class CreateUserSerializer(serializers.Serializer): ... # token token = serializers.CharField(label=' token', read_only=True) ... def create(self, validated_data): """ """ user=User() ... user.save() # token jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER payload = jwt_payload_handler(user) token = jwt_encode_handler(payload) user.token = token return user
전재 대상:https://www.cnblogs.com/xiaolu915/p/10529413.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.