타임스탬프 사용해 서명하기¶
서명이 만료되게 하고 싶다면 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_timestamp
가True
면 서명의 타임스탬프를 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.
-