diff --git a/moto/sts/models.py b/moto/sts/models.py index 3a9e64e0c..f70c59179 100644 --- a/moto/sts/models.py +++ b/moto/sts/models.py @@ -4,9 +4,11 @@ from moto.core.utils import iso_8601_datetime class Token(object): - def __init__(self, duration): + def __init__(self, duration, name=None, policy=None): now = datetime.datetime.now() self.expiration = now + datetime.timedelta(seconds=duration) + self.name = name + self.policy = None @property def expiration_ISO8601(self): @@ -32,6 +34,10 @@ class STSBackend(BaseBackend): token = Token(duration=duration) return token + def get_federation_token(self, name, duration, policy): + token = Token(duration=duration, name=name, policy=policy) + return token + def assume_role(self, **kwargs): role = AssumedRole(**kwargs) return role diff --git a/moto/sts/responses.py b/moto/sts/responses.py index e97c9ec51..23561dd7e 100644 --- a/moto/sts/responses.py +++ b/moto/sts/responses.py @@ -12,6 +12,15 @@ class TokenResponse(BaseResponse): template = Template(GET_SESSION_TOKEN_RESPONSE) return template.render(token=token) + def get_federation_token(self): + duration = int(self.querystring.get('DurationSeconds', [43200])[0]) + policy = self.querystring.get('Policy', None)[0] + name = self.querystring.get('Name')[0] + token = sts_backend.get_federation_token( + duration=duration, name=name, policy=policy) + template = Template(GET_FEDERATION_TOKEN_RESPONSE) + return template.render(token=token) + def assume_role(self): role_session_name = self.querystring.get('RoleSessionName')[0] role_arn = self.querystring.get('RoleArn')[0] @@ -46,6 +55,35 @@ GET_SESSION_TOKEN_RESPONSE = """ + + + + AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQW + LWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd + QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU + 9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz + +scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA== + + + wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY + + {{ token.expiration_ISO8601 }} + AKIAIOSFODNN7EXAMPLE + + + arn:aws:sts::123456789012:federated-user/{{ token.name }} + 123456789012:{{ token.name }} + + 6 + + + c6104cbe-af31-11e0-8154-cbc7ccf896c7 + +""" + + ASSUME_ROLE_RESPONSE = """