Вопрос : «Почему Cognito отклоняет мое утверждение SAML?»
Быстрый ответ :
Ваше утверждение SAML НЕ несет / не доставляет все атрибутытребуется Cognito (см. подробный ответ и решение ниже).
Вопрос : «Для пула пользователей в Cognito задан адрес электронной почты, и я думаю, что у меня есть атрибутсопоставление установлено правильно, но на самом деле это не так просто сказать. "
Ответ :
Ваш ответ SAML указывает, что сопоставление атрибутов НЕ установлено правильно.
(1) Атрибут "RoleSessionName", передаваемый вашим Shibboleth IdP v3, ответ SAML на Cognito НЕ требуется Cognito.
<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">bob</saml2:AttributeValue>
</saml2:Attribute>
Правильный атрибут "RoleSessionName", передаваемый Shibboleth IdP v3, ответ SAML на Cognito должен быть вашим E-адрес электронной почты "bob@example.com" вместо вашего имени "bob".
<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">bob@example.com</saml2:AttributeValue> </saml2:Attribute>
(2) Разрешение: (может потребоваться незначительный пересмотр в зависимости от вашего хранилища данных, такого как LDAP)
Добавьте разрешение атрибута
<resolver:AttributeDefinition id="awsRoles" xsi:type="ad:Simple" sourceAttributeID="employeeType">
<resolver:Dependency ref="myLDAP"/>
<resolver:AttributeEncoder xsi:type="enc:SAML2String" name="https://aws.amazon.com/SAML/Attributes/Role"
friendlyName="Role" />
</resolver:AttributeDefinition>
<resolver:AttributeDefinition id="awsRoleSessionName" xsi:type="ad:Simple" sourceAttributeID="mail">
<resolver:Dependency ref="myLDAP"/>
<resolver:AttributeEncoder xsi:type="enc:SAML2String" name="https://aws.amazon.com/SAML/Attributes/RoleSessionName"
friendlyName="RoleSessionName" />
</resolver:AttributeDefinition>
в "attribute-resolver-full.xml" или "attribute-resolver.xml" (в зависимости от конфигурации IdP Shibboleth). Пример средства разрешения атрибутов IdP Shibboleth .
Обратите внимание, что атрибут OpenLDAP "employeeType" используется для выполнения роли Amazon AWS.Ваше хранилище данных / хранилище может использовать другой атрибут для выполнения роли Amazon AWS.
(I) Следующие атрибуты OpenLDAP были сопоставлены с конфигурацией AWS через консоль администрирования AWS.
mail: winston.hong@example.com
employeeType: arn:aws:iam::{ACCOUNT}:role/shibbolethidp,arn:aws:iam::{ACCOUNT}:saml-provider/Shibboleth-IdP
(II) Важные замечания о роли
Атрибут OpenLDAP "employeeType" - это Роль в моем эксперименте по проверке с консолью AWS.
Следующие выбранные шаги конфигурации (выполняемые через консоль администрирования AWS) обеспечивают сопоставление атрибута OpenLDAP "employeeType"с настройкой конфигурации AWS «Роль» :
(II.a) Войдите в систему Консоль управления Amazon AWS
......
(II.b) На экране Поставщики удостоверений нажмите Создать поставщика .
На экране Настройка поставщика ,
Выберите SAML из раскрывающегося списка Тип поставщика,
Ввод Имя провайдера провайдера идентификации Shibboleth (например, Shibboleth-IdP , который будет преобразован AWS в arn: aws: iam :: {ACCOUNT}: saml-provider / Shibboleth-IdP ).
Нажмите Выберите файл документа метаданных , чтобызагрузите файл метаданных SAML IdP (например, shibboleth-saml-idp.xml) поставщика удостоверений Shibboleth,
Нажмите Следующий шаг .
......
(II.c) На экране Выберите тип доверенного объекта ,
Выберите Федерация SAML 2.0 ,
Выберите Shibboleth-IdP провайдер идентификации из раскрывающегося списка SAML провайдер ,
Выбрать Разрешить программный доступ и доступ к консоли управления AWS ,
Сохранить авто-выбранный Атрибут и значение по умолчанию Значение URL-адреса входа AWS SAML без изменений,
Нажмите Далее: Разрешения .
......
(II.d) На экране роли Обзор ,
Ввод Имя роли (например, shibbolethidp, который будет преобразован AWS в arn: aws: iam :: {ACCOUNT}: role / shibbolethidp)
Ввод Описание роли (например, SSO SAML, предоставленный Shibboleth IdP),
Нажмите Создать роль .
(III) Для вашего удобства я сделал 9-й коммит по загрузке метаданных Amazon AWS SP и соответствующей конфигурации SAML в Как собрать и запустить Shibboleth SAML IdP и SP с использованием контейнера Docker .
Обратите внимание, что Я вошел в учетную запись Amazon AWS («my-aws-id», например, 123456789012) с именем пользователя «winston.hong@example.com», успешно используя Shibboleth IdP, работающий сDocker Container с 9-м коммитом .
Выполнением конфигурации IdP SAML Shibboleth со ссылкой на 9-й коммит to Как создать и запуститьShibboleth SAML IdP и SP, используя контейнер Docker , вы можете войти в свою учетную запись Amazon AWS («my-aws-id», например, 123456789012) под своим именем пользователя (например, «winston.hong@your-company.com»).") федерация Shibboleth IdP ..
(IV) Ниже приведен мой отзыв 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) Amazon AWS предоставляет руководство по настройке Как использовать Shibboleth для единого входа в консоль управления AWS .
Shibboleth предоставляет руководство по настройке IdP Shibboleth с Amazon Cognito
(4) Как собрать и запустить Shibboleth SAML IdP и SP с использованием контейнера Docker в репозитории GitHub предоставляет инструкцию по созданию провайдера аутентификации / авторизации на основе SAML с использованием Shibboleth SAML IdP и OpenLDAP.
(I) Я проверил единый вход в систему SAML (SSO), предоставляемый запущенным в Docker Shibboleth SAML IdP (Identity Provider) и OpenLDAP для следующих корпоративных приложений.Другими словами, я использовал IdP Shibboleth SAML и OpenLDAP под управлением Docker для успешного входа в следующие корпоративные приложения.
Microsoft Office 365
Google G Suite
Salesforce
Dropbox
Box
Amazon AWS
OpenStack
Citrix NetScaler
VMware vCloud Director
Oracle NetSuite
(II) Я проверил IdP Shibboleth с Консоль управления Amazon AWS со ссылкой на Как использовать Shibboleth для единого входа вКонсоль управления AWS
(III) Мы разработали нашу прежнюю версию Система аутентификации и авторизации с использованием нулевого пароля в Java и использовали Shibboleth IdP для обеспечения SAMLЕдиный вход для корпоративных приложений.
Мы разработали нашу текущую версию Система аутентификации и авторизации с нулевым паролем с масштабируемостью и высокой доступностью в Scala для обеспечения единого единого входа SAML для предприятий.приложения без Shibboleth IdP.
Еще один вопрос StackOverflow «Настройка нового Shibboleth IdP для работы с существующим SAML SP» * предоставляет ценную информацию и обсуждения конфигурации SAML Shibboleth.