JSON 웹 서명 (JWS)¶
JSON 웹 서명(JWS)은 앞서 본 URL 안전 직렬화와 비슷하게 동작하되 draft-ietf-jose-json-web-signature에 따라 헤더를 내놓는다.
from itsdangerous import JSONWebSignatureSerializer
s = JSONWebSignatureSerializer("secret-key")
s.dumps({"x": 42})
'eyJhbGciOiJIUzI1NiJ9.eyJ4Ijo0Mn0.ZdTn1YyGz9Yx5B5wNpWRL221G1WpVE5fPCPKNuc6UAo'
값을 다시 받을 때 다른 직렬화와 마찬가지로 기본적으로 헤더가
반환되지 않는다. 하지만 return_header=True
를 줘서 헤더를
요청할 수도 있다. 직렬화 때 자체적인 헤더 필드를 제공할 수 있다.
s.dumps(0, header_fields={"v": 1})
'eyJhbGciOiJIUzI1NiIsInYiOjF9.MA.wT-RZI9YU06R919VBdAfTLn82_iIQD70J_j-3F4z_aM'
s.loads(
"eyJhbGciOiJIUzI1NiIsInYiOjF9"
".MA.wT-RZI9YU06R919VBdAfTLn82_iIQD70J_j-3F4z_aM"
)
(0, {'alg': 'HS256', 'v': 1})
현재 itsdangerous에서는 HMAC SHA 파생 알고리듬과 none 알고리듬만
제공하고 ECC 기반 알고리듬을 지원하지 않는다. 헤더의 알고리듬을
직렬화의 알고리듬과 비교해서 불일치 시
BadSignature
예외를 던진다.
-
class
itsdangerous.jws.
JSONWebSignatureSerializer
(secret_key, salt=None, serializer=None, serializer_kwargs=None, signer=None, signer_kwargs=None, algorithm_name=None)¶ 이 직렬화 모듈에선 JSON 웹 서명(JWS) 지원을 구현하고 있다. JWS Compact Serialization만 지원한다.
-
default_algorithm
= 'HS512'¶ 서명 생성에 사용할 기본 알고리듬
-
default_serializer
¶ alias of
itsdangerous._json._CompactJSON
-
dump_payload
(header, obj)¶ 인코딩 된 객체를 덤프 한다. 반환 값은 항상 bytes다. 내부 직렬화 모듈에서 텍스트를 반환하면 UTF-8으로 인코딩 된다.
-
dumps
(obj, salt=None, header_fields=None)¶ Serializer.dumps()
와 비슷하되 JSON 웹 서명을 만들어 낸다. JWS 헤더에 추가로 포함시킬 필드를 지정하는 것도 가능하다.
-
load_payload
(payload, serializer=None, return_header=False)¶ 인코딩 된 객체를 적재한다. 페이로드가 유효하지 않으면 함수에서
BadPayload
를 던진다.serializer
매개변수를 이용하면 클래스에 저장된 것과 다른 직렬화 방식을 쓸 수 있다. 인코딩 된payload
는 항상 bytes여야 한다.
-
loads
(s, salt=None, return_header=False)¶ dumps()
의 반대.return_header
를 설정해 요청하면 페이로드와 헤더로 된 튜플을 반환한다.
-
loads_unsafe
(s, salt=None, return_header=False)¶ loads()
와 비슷하되 서명 검증이 빠져 있다. 직렬화 모듈 동작 방식에 따라선 아주 위험한 동작일 수도 있다. 반환 값이 단순 페이로드가 아니라(signature_valid, payload)
다. 첫 항목은 서명이 유효한지 여부를 나타내는 불리언이다. 이 함수는 절대 실패하지 않는다.디버깅용으로만, 그리고 직렬화 모듈에 취약성이 없다는 게 확실할 때만 써야 한다. (예를 들어 pickle 직렬화 모듈에는 쓰지 말아야 한다.)
New in version 0.15.
-
-
class
itsdangerous.jws.
TimedJSONWebSignatureSerializer
(secret_key, expires_in=None, **kwargs)¶ 기본
JSONWebSignatureSerializer
처럼 동작하되 서명 시간까지 기록하므로 서명이 만료되게 할 수 있다.JWS에서는 현재 이런 동작을 명세하고 있지 않지만 이런 확장이 가능하다고 명세에서 언급하고 있다. draft-ietf-oauth-json -web-token에 명세된 것과 비슷한 방식으로 만료 날짜를 헤더에 인코딩 한다.
-
loads
(s, salt=None, return_header=False)¶ dumps()
의 반대.return_header
를 설정해 요청하면 페이로드와 헤더로 된 튜플을 반환한다.
-