타임스탬프 사용해 서명하기

서명이 만료되게 하고 싶다면 TimestampSigner 클래스를 쓸 수 있다. 그러면 타임스탬프 정보를 추가하고 서명한다. 서명 검증 시 타임스탬프가 만료되지 않았는지 확인할 수 있다.

from itsdangerous import TimestampSigner
s = TimestampSigner('secret-key')
string = s.sign('foo')
s.unsign(string, max_age=5)
Traceback (most recent call last):
  ...
itsdangerous.exc.SignatureExpired: Signature age 15 > 5 seconds
class itsdangerous.timed.TimestampSigner(secret_key, salt=None, sep='.', key_derivation=None, digest_method=None, algorithm=None)

기본 Signer처럼 동작하되 서명 시간까지 기록하므로 서명을 만료되게 할 수 있다. 서명이 만료돼서 서명 검증에 실패하면 unsign() 메소드에서 SignatureExpired를 던질 수 있다.

get_timestamp()

현재 타임스탬프를 반환한다. 반드시 정수를 반환해야 한다.

sign(value)

문자열을 받아서 서명을 하고 시간 정보를 덧붙인다.

timestamp_to_datetime(ts)

get_timestamp()에서 얻은 타임스탬프를 datetime 객체로 변환하는 데 사용.

unsign(value, max_age=None, return_timestamp=False)

기본 Signer.unsign`()과 비슷하게 동작하되 시간도 검사한다. 기본 동작 방식은 기반 클래스의 docstring을 보라. return_timestampTrue면 서명의 타임스탬프를 UTC로 된 datetime.datetime 객체로 반환한다.

validate(signed_value, max_age=None)

서명된 값을 받아서 검증만 한다. 서명이 존재하고 유효하면 True를 반환한다.

class itsdangerous.timed.TimedSerializer(secret_key, salt=b'itsdangerous', serializer=None, serializer_kwargs=None, signer=None, signer_kwargs=None, fallback_signers=None)

기본으로 Signer 대신 TimestampSigner를 쓴다.

default_signer

alias of TimestampSigner

loads(s, max_age=None, return_timestamp=False, salt=None)

dumps()의 반대. 서명 검증이 실패하면 BadSignature를 던진다. max_age를 주면 서명이 그 초 수보다 오래됐는지 확인한다. 서명이 그보다 오래된 경우 SignatureExpired를 던진다. 모든 인자들이 signer의 unsign() 메소드로 전달된다.

loads_unsafe(s, max_age=None, salt=None)

loads()와 비슷하되 서명 검증이 빠져 있다. 직렬화 모듈 동작 방식에 따라선 아주 위험한 동작일 수도 있다. 반환 값이 단순 페이로드가 아니라 (signature_valid, payload)다. 첫 항목은 서명이 유효한지 여부를 나타내는 불리언이다. 이 함수는 절대 실패하지 않는다.

디버깅용으로만, 그리고 직렬화 모듈에 취약성이 없다는 게 확실할 때만 써야 한다. (예를 들어 pickle 직렬화 모듈에는 쓰지 말아야 한다.)

New in version 0.15.