Вопрос 1 : я создаю IdP на своем локальном компьютере и настроил IdP в настройках AWS IAM, теперь я хотел бы запустить исходный единый вход IdP с моего локального компьютера и войти в AWS, однакоошибка всегда отображается на странице AWS:
Срок действия ответа истек (Служба: AWSSecurityTokenService; Код состояния: 400; Код ошибки: ExpiredTokenException; Идентификатор запроса: 18fc7e20-97eb-11e9-97e4-0f55a663916e).Пожалуйста, попробуйте еще раз.
Что мне делать в этой ситуации?Мы будем благодарны за любую помощь.
Ответ :
Это типичная ошибка федеративного пользователя AWS-SAML IdP (Сервис: AWSSecurityTokenService; Код состояния: 400;Код ошибки: ExpiredTokenException).
Ответ / оценка / токен SAML должны быть погашены в течение 5 минут после выдачи, предоставленной вашим IdP SAML.
Разрешение :
(I) Проверьте, синхронизировано ли время вашего сервера SAML IdP с сервером NTP.
(II) После того, как время вашего сервера SAML IdP будет синхронизировано с часовым поясом сервера AWS (в течение 1 минуты или менее), перезапустите свой IdP SAML.
Вопрос 2 : скриншот страницы ошибки
Вот ответ SAML
Ответ :
На скриншоте страницы ошибки указано, что ваша роль AWS - MySSO,но ваш ответ SAML указывает, что ваша роль AWS - ParaSSO.Это вызовет еще одну ошибку федеративного пользователя AWS-SAML IdP.
Я поделился своим опытом успешного единого входа (SSO) в Shibboleth SAML IdP с Amazon AWS в другом вопросе StackOverflow Почему Cognito отвергает мое утверждение SAML? .
Ниже приведен мой ответ SAML для успешного входа в AWS.
<saml2p:Response Destination="https://signin.aws.amazon.com/saml"
ID="_fc89710799c4c2c540341e94bf7132d5"
IssueInstant="2019-06-11T18:49:38.300Z"
Version="2.0"
xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
>
<saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">https://idp.example.com/idp/shibboleth</saml2:Issuer>
<saml2p:Status>
<saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</saml2p:Status>
<saml2:Assertion ID="_91749d5ecb8512c0c5d658a77cb25928"
IssueInstant="2019-06-11T18:49:38.300Z"
Version="2.0"
xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<saml2:Issuer>https://idp.example.com/idp/shibboleth</saml2:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
<ds:Reference URI="#_91749d5ecb8512c0c5d658a77cb25928">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="xsd"
xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<ds:DigestValue>mDAgwb9ZJxc+01sC99lAlAIAOEoiTgzHVTm4F9bdn/0=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
LWiL3+CdU6y86zBLx3vG6na1o46EUgiN7iV+b4J2lPvZK7+Oeu6XSenJlzo/cUMT19pYYrDMM652
3lDAJCuOKPx4zTRIcabGrgzTKgmen0SHqWPxeL7t23RB6+v5AUvVw02tXqQhlggKEe3H+1T1k5q0
cGc1xw5CQtI8zE6GK7nG1INnU7mo872H9x+zM1zy3yyvrWOkHHhVFqQQ1Tu+0ev4BIhTQaVgC+pM
/ZvpctNjDMl1q4RSt1qumC+KFsYZlbrsLG7AvGJuR39wt/HV7F8Je3AUGGwMtGjkpRDuN1lIHrMq
VzFf/5eKUv20rEk3aOxoV/sMfcuhWo27+NjE1g==
</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIDPDCCAiSgAwIBAgIVALPPoC598LJ6ZJJJXCA2ESASlN4AMA0GCSqGSIb3DQEBCwUAMB8xHTAb
BgNVBAMMFGlkcXNhbWwuaWRxdWFudGEuY29tMB4XDTE3MDYwMjIxNDI0NloXDTM3MDYwMjIxNDI0
NlowHzEdMBsGA1UEAwwUaWRxc2FtbC5pZHF1YW50YS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAs4ml4G592b059YDgyD/MLWQKaKrc0/24Ufbl/JY7wOI1RpxW8DlbCvibzQge6Tu
/8LVy4GIDb8QLxmCfFKYn97HC68TgXVJ+m+sQm+e4SVg6V2q+JY94LLcoFVe8+78ZIYT23KLkTv2
RlHzes/sL1YaPSK4UuN+/ezppyX2t9BGNfuiUKA0KCf7wMFuQ07Fr65FTcGXQyxhPyaNrXjrNMJa
LqwpCaesVdVzoqPevYVN3+nzAvOWoEbi6IcwnF07D0FYren/GPRXPAk5sP6fF3X0rJCkSq+d5t5P
0gWONlvm9WlUrKadmeiibCtR2lGQ/dZGmyUzIILsuOwu4yp/EsI3AgMBAAGjbzBtMB0GA1UdDgQW
BBREpZrZlnm8YrbSFcl59WRR5IY2FTBMBgNVHREERTBDghRpZHFzYW1sLmlkcXVhbnRhLmNvbYYr
aHR0cHM6Ly9pZHFzYWQCV63ubc+tsfzCvL48k35RzLAD15DIdbS9pZHAvc2hpYmJvbGV0aDANBgk
AAOCAQEAEvrdnSvK2C2rcRr7kXn4Q/NaEovuUeqaNs1k/2+dSqs8rroM+m3Iq8RlBcmKnP/+mET3
wwUaWRxc2FtbC5pZHF1YW50YS5jb20wggEiLRXay9y1uJXyZx37RDkGu8SD7+zf8znM+TCsX/qAP
6Ve95WAeX4uB8Aeol3LULe1dePsRb/1RNpKsm8NomVzCwBXK9vyv8t3IVN40jZMaaTtR0YR22fTu
qTyIMarMPO0Eh0f1FHraYaXfyop1OJcYlISpYe+c4vNvAXwEtHkZD2Iu/2aEMGcvBo3uq6OYVDXO
fI3CvoB7sRtxURtj+vVSZKjDe6s7+lRcE1tpDkwOEEuDzA==</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<saml2:Subject>
<saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
NameQualifier="https://idp.example.com/idp/shibboleth"
SPNameQualifier="urn:amazon:webservices"
xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
>AAdzZWNyZXQx/wu+MEcVaUwjGOXhDKAO/5KXLD2AcDGnu1DyoP2C4ztOF01Su6tTJDytykrsv7W2dSV4FkL42ORYDiipBEuwiRSbnvViKbFBkHYN4YUmQzttx3DPNW/w42tMjLrY2iyn7sAUgQSVNGRHyMAH</saml2:NameID>
<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml2:SubjectConfirmationData Address="192.168.150.10"
NotOnOrAfter="2019-06-11T18:54:38.412Z"
Recipient="https://signin.aws.amazon.com/saml"
/>
</saml2:SubjectConfirmation>
</saml2:Subject>
<saml2:Conditions NotBefore="2019-06-11T18:49:38.300Z"
NotOnOrAfter="2019-06-11T18:54:38.300Z"
>
<saml2:AudienceRestriction>
<saml2:Audience>urn:amazon:webservices</saml2:Audience>
</saml2:AudienceRestriction>
</saml2:Conditions>
<saml2:AuthnStatement AuthnInstant="2019-06-11T18:49:38.041Z"
SessionIndex="_79ee919a4e3fcd2f6d13702b60bfd357"
>
<saml2:SubjectLocality Address="192.168.150.10" />
<saml2:AuthnContext>
<saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml2:AuthnContextClassRef>
</saml2:AuthnContext>
</saml2:AuthnStatement>
<saml2:AttributeStatement>
<saml2:Attribute FriendlyName="Role"
Name="https://aws.amazon.com/SAML/Attributes/Role"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
>
<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="xsd:string"
>arn:aws:iam::my-aws-id:role/shibbolethidp,arn:aws:iam::my-aws-id:saml-provider/Shibboleth-IdP</saml2:AttributeValue>
</saml2:Attribute>
<saml2:Attribute FriendlyName="RoleSessionName"
Name="https://aws.amazon.com/SAML/Attributes/RoleSessionName"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
>
<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="xsd:string"
>winston.hong@example.com</saml2:AttributeValue>
</saml2:Attribute>
</saml2:AttributeStatement>
</saml2:Assertion>
</saml2p:Response>
Дополнительный вопрос 3 : я изменил skewAllowance, и ExpiredTokenException имеетушел, но все еще есть ошибка AccessDenied, у вас есть идеи?
Ответ :
Я извлекаю атрибут SAML "Роль" из утверждения SAML (как показано ниже).Видно, что атрибут «Роль» состоит из двух значений «роль» и «поставщик saml».
<saml2:Attribute FriendlyName="Role"
Name="https://aws.amazon.com/SAML/Attributes/Role" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" >
<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="xsd:string"
>arn:aws:iam::my-aws-id:role/shibbolethidp,arn:aws:iam::my-aws-id:saml-provider/Shibboleth-IdP</saml2:AttributeValue>
</saml2:Attribute>
Необходимо убедиться, что оба значения атрибута «Роль» (переносимые утверждением SAML / ответом SAML) должны быть точно такими же, как вы объявляете через консоль администратора Amazon AWS.Пример # 1: ParaSSO и Para для вашего локального IdP;Пример № 2: shibbolethidp и Shibboleth-IdP для моего SAML IdP.Любая небольшая разница приведет к «Код ошибки: AccessDenied;».
Подвопрос (3.a) : Я попытался с помощью okta / onelogin, и он может SAML успешно получить доступ к моему AWS, ипроверил конфигурацию saml response / aws iam, не увидел много отличий от моего локального IdP, я запустил свой сервер IdP во внутренней сети 192.168.2.237, потому что есть ограничение AWS для локального адреса или что-то еще?Мы будем благодарны за любую помощь.
Ответ :
(I) Нет ограничений AWS для локального адреса, как показано в моем ответе SAML для успешного входа в AWS.Я также использовал локальный Shibboleth IdP для успешного входа в консоль администратора Amazon AWS.
<saml2:SubjectLocality Address="192.168.150.10" />
(II) В дополнение к атрибуту «Role» и атрибуту «RoleSessionName» необходимо убедиться, что метаданные SAML IdP IdPвашего локального IdP содержит полную и точную информацию об аутентификации SAML, требуемую Amazon AWS, как минимум открытый сертификат / ключ для проверки подписанного утверждения и поставщика SAML IdP.
(II.a) Типичная ошибка отказа в доступе:что ваши локальные метаданные IdP предоставляют неправильный открытый сертификат / ключ для проверки подписанного утверждения в Amazon AWS.
(II.b) Для вашего удобства Как собрать и запустить Shibboleth SAML IdP и SP с помощью контейнера Docker в хранилище GitHub предоставляет метаданные Shibboleth SAML IdP "shibboleth-idp-dockerized / ext-conf /metadata/idp-metadata.xml ", которая была подтверждена успешным SSO для Amazon AWS. Эти метаданные IdP SAML Shibboleth состоят из трех сертификатов подписи (подписать Ответы, подписать Утверждения и зашифровать Утверждения).
(II.c) Amazon AWS извлечет открытый сертификат / ключ для подписи подтверждений из ваших метаданных SAML IdP. В моих метаданных Shibboleth IdP «shibboleth-idp-dockerized / ext-conf / metadata / idp-metadata.xml», предоставленных по приведенной выше ссылке в репозитории GitHub, второй публичный сертификат / ключ (или сертификат подписи) используется Amazon AWS для проверить подписанное утверждение.
(III) Для вашего удобства я сделал 9-й коммит по загрузке метаданных Amazon AWS SP и соответствующей конфигурации SAML в Как создать и запустить Shibboleth SAML IdP и SP с помощью контейнера Docker .
Обратите внимание, что Я вошел в учетную запись Amazon AWS («my-aws-id», например, 123456789012) с именем пользователя «winston.hong@example.com», успешно используя Shibboleth IdP, работающий с Docker. Контейнер с 9 коммитом .
Выполнив настройку Shibboleth SAML IdP со ссылкой на 9-й коммит до Как собрать и запустить Shibboleth SAML IdP и SP с помощью контейнера Docker , вы можете войти в свой Amazon Учетная запись AWS («my-aws-id», например, 123456789012) с вашим именем пользователя (например, «winston.hong@your-company.com»), объединенная с Shibboleth IdP.
(IV) Я поделился своим успешным опытом настройки SAML в Shibboleth IdP SSO для Amazon AWS на другом вопросе StackOverflow Почему Cognito отклоняет мое утверждение SAML? .