为用户池配置身份提供商
借助用户池,您可以通过各种外部身份提供者(IdP)来实施登录。指南的这一部分说明了如何在 Amazon Cognito 控制台中使用用户池设置这些身份提供者。或者,您可以使用用户池 API 和 Amazon SDK 以编程方式添加用户池身份提供者。有关更多信息,请参阅 CreateIdentityProvider。
支持的身份提供者选项包括 Facebook、Google 和 Amazon 等社交提供者,以及 OpenID Connect(OIDC)和 SAML 2.0 提供者。在开始之前,请为自己设置 IdP 的管理凭证。对于每种类型的提供者,您都需要注册应用程序,获取必要的凭证,然后在用户池中配置提供者的详细信息。然后,您的用户可以使用已连接身份提供者的现有账户注册和登录您的应用程序。
在联合身份提供商登录下的登录体验选项卡中添加和更新用户池 IdP。有关更多信息,请参阅 通过第三方添加用户池登录。
使用社交 IdP 设置用户登录
您可以使用联合身份验证,将 Amazon Cognito 用户池与社交身份提供商(如 Facebook、Google 和 Login with Amazon)集成起来。
要添加社交身份提供商,您首先要通过该身份提供商创建一个开发人员账户。在拥有开发人员账户后,您应向身份提供商注册您的应用程序。该身份提供商将为您的应用程序创建应用程序 ID 和应用程序密钥,然后您在您的 Amazon Cognito 用户池中配置这些值。
将用户登录与社交 IdP 集成
-
登录 Amazon Cognito 控制台
。如果出现提示,请输入 Amazon 凭证。 -
在导航窗格中,选择 User Pools(用户池),然后选择要编辑的用户池。
-
选择 Sign-in experience(登录体验)选项卡并找到 Federated sign-in(联合登录)。
-
选择 Add an identity provider(添加身份提供商),或者选择已配置的身份提供商(例如 Facebook、Google、Amazon 或 Apple),找到 Identity provider information(身份提供商信息),然后选择 Edit(编辑)。有关添加社交身份提供商的更多信息,请参阅将社交身份提供者与用户池配合使用。
-
根据您选择的 IdP,完成以下步骤之一,从而输入社交身份提供商的信息:
- Facebook、Google 和 Login with Amazon
-
输入您创建客户端应用程序时收到的应用程序密钥。
- Sign In with Apple
-
输入您向 Apple 提供的服务 ID,以及创建应用程序客户端时收到的团队 ID、密钥 ID 和私有密钥。
-
对于 Authorize scopes(授权范围),输入要映射到用户池属性的社交身份提供商范围的名称。范围定义了您要通过应用程序访问的用户属性(如名称和电子邮件)。输入范围时,根据您选择的 IdP 使用以下准则:
-
Facebook – 以英文逗号分隔范围。例如:
public_profile, email
-
Google、Login with Amazon 和 Sign In with Apple – 以空格分隔范围。例如:
-
Google:
profile email openid
-
Login with Amazon:
profile postal_code
-
通过 Apple 登录:
name email
注意
对于 Sign in with Apple(控制台),请使用复选框以选择范围。
-
-
-
选择 Save changes(保存更改)。
-
从 App client integration(应用程序客户端集成)选项卡上的列表中选择一个 App clients(应用程序客户端),然后选择 Edit hosted UI settings(编辑托管 UI 设置)。将新的社交身份提供商添加到 Identity providers(身份提供商)下的应用程序客户端。
-
选择 Save changes(保存更改)。
有关社交 IdP 的更多信息,请参阅 将社交身份提供者与用户池配合使用。
使用 OIDC IdP 设置用户登录
您可以将用户登录与 OpenID Connect (OIDC) 身份提供商 (IdP) 集成,例如 Salesforce 或 Ping Identity。
向用户群体添加 OIDC 提供者
-
转到 Amazon Cognito 控制台
。如果出现提示,请输入 Amazon 凭证。 -
从导航菜单中选择 User Pools(用户池)。
-
从列表中选择一个现有用户池,或创建一个用户池。
-
选择 Sign-in experience(登录体验)选项卡。找到 Federated sign-in(联合登录),然后选择 Add an identity provider(添加身份提供商)。
-
选择 OpenID Connect 身份提供商。
-
在 Provider name(提供商名称)中输入一个唯一名称。
-
将您从提供商那里收到的客户端 ID 输入到 Client ID(客户端 ID)。
-
将您从提供商那里收到的客户端密钥输入到 Client secret(客户端密钥)。
-
为该提供商输入 Authorized scopes(授权范围)。范围定义了应用程序将向您的提供商请求的用户属性组(例如
name
和email
)。根据 OAuth 2.0规范,范围必须以空格分隔。 您的用户必须同意向您的应用程序提供这些属性。
-
请选择一个 Attribute request method(属性请求方法),以便为 Amazon Cognito 提供 HTTP 方法(GET 或 POST),Amazon Cognito 使用该方法从提供商运营的 userInfo 端点中获取用户的详细信息。
-
请选择 Setup method(设置方法)并通过 Auto fill through issuer URL(自动填充发布者 URL)或 Manual input(手动输入)检索 OpenID Connect 端点。当您的提供商具有公有
.well-known/openid-configuration
端点且 Amazon Cognito 可以在其中检索authorization
、token
、userInfo
和jwks_uri
端点的 URL 时,使用 Auto fill through issuer URL(自动填充发布者 URL)。 -
请输入发布者 URL 或 IdP 中的
authorization
、token
、userInfo
和jwks_uri
端点 URL。注意
您只能将端口号 443 和 80 用于发现、自动填充和手动输入的 URL。如果您的 OIDC 提供商使用任何非标准 TCP 端口,则用户登录失败。
发布者 URL 必须以
https://
开头,而且不得以/
字符结尾。例如,Salesforce 使用以下 URL:https://login.salesforce.com
与您的发布者 URL 关联的
openid-configuration
文档必须为以下值提供 HTTPS URL:authorization_endpoint
、token_endpoint
、userinfo_endpoint
和jwks_uri
。同样,当您选择 Manula input(手动输入)时,只能输入 HTTPS URL。 -
默认情况下,sub OIDC 声明将映射到用户池 Username(用户名)属性中。您可以将其他 OIDC 声明
映射到用户池属性。输入 OIDC 声明,然后从下拉列表中选择对应的用户池属性。例如,声明 email 通常会映射到用户池属性 Email(电子邮件)。 -
请将身份提供商的其它属性映射到您的用户池。有关更多信息,请参阅指定适用于用户池的身份提供程序属性映射。
-
选择 Create(创建)。
-
从 App client integration(应用程序客户端集成)选项卡上的列表中选择 App clients(应用程序客户端)的其中一个,然后选择 Edit hosted UI settings(编辑托管 UI 设置)。将新的 OIDC 身份提供商添加到 Identity providers(身份提供商)下的应用程序客户端。
-
选择 Save changes(保存更改)。
有关 OIDC IdP 的更多信息,请参阅将 OIDC 身份提供者与用户池配合使用。
使用 SAML IdP 设置用户登录
您可以使用 Amazon Cognito 用户池的联合身份验证与 SAML 身份提供商(IdP)集成。您可以通过上传文件或输入元数据文档端点 URL 来提供元数据文档。有关获取第三方 SAML IdP 元数据文档的信息,请参阅 配置第三方 SAML 身份提供者。
在您的用户池中配置 SAML 2.0 身份提供商
-
转到 Amazon Cognito 控制台
。如果出现提示,请输入 Amazon 凭证。 -
选择用户池。
-
从列表中选择一个现有用户池,或创建一个用户池。
-
选择 Sign-in experience(登录体验)选项卡。找到 Federated sign-in(联合登录),然后选择 Add an identity provider(添加身份提供商)。
-
选择 SAML 身份提供商。
-
输入以逗号分隔的 Identifiers(标识符)。标识符指示 Amazon Cognito 检查用户登录电子邮件地址,然后将用户引导到与其域对应的提供商。
-
如果您希望 Amazon Cognito 在用户注销时向您的提供商发送已签名的注销请求,请选择 Add sign-out flow(添加注销流程)。配置 SAML 2.0 身份提供商,向您配置托管 UI 时 Amazon Cognito 创建的
https://
端点发送注销响应。此mydomain.us-east-1.amazoncognito.com
/saml2/logoutsaml2/logout
端点使用 POST 绑定。注意
如果选择此选项,并且您的 SAML 身份提供商需要已签名的注销请求,则您还需要为您的 SAML IdP 配置 Amazon Cognito 提供的签名证书。
SAML IdP 将处理已签名的注销请求并从 Amazon Cognito 会话中注销您的用户。
-
选择 Metadata document source(元数据文档源)。如果您的身份提供商在公有 URL 上提供 SAML 元数据,则可以选择 Metadata document URL(元数据文档 URL),然后输入该公有 URL。否则,请选择 Upload metadata document(上载元数据文档),然后选择您之前从提供商下载的元数据文件。
注意
如果您的提供商具有公有端点,我们建议您输入元数据文档 URL,而不是上载文件。如果您使用 URL,Amazon Cognito 会自动刷新元数据。通常,元数据刷新操作每 6 小时执行一次或在元数据过期前执行(以时间较早者为准)。
-
Map attributes between your SAML provider and your app(在 SAML 提供商和应用程序之间映射属性)将 SAML 提供程序属性映射到用户池中的用户配置文件。在属性映射中包含用户池必需属性。
例如,当您选择 User pool attribute(用户池属性)
email
时,按照您的身份提供商提供的 SAML 断言中显示的内容,输入 SAML 属性名称。您的身份提供商可能会提供示例 SAML 断言以供参考。一些身份提供商使用简单名称(如email
),另一些则使用类似于下面 URL 格式的属性名称:http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
-
选择 Create(创建)。
注意
如果您在使用 HTTPS 元数据端点 URL 创建 SAML IdP 时看见 InvalidParameterException
,请确保元数据端点已正确设置 SSL,并且存在与之关联的有效 SSL 证书。这种例外的一个例子是“Error retrieving metadata from <metadata endpoint>
”(从 <元数据端点> 检索元数据时出错)。
设置 SAML IdP 以添加签名证书
-
要获取包含 IdP 用于验证已签名注销请求的公有密钥的证书,请在联合身份验证控制台页面上的身份提供者下,在 SAML 对话框上的使用中的 SAML 提供者下选择显示签名证书对话框。
有关 SAML IdP 的更多信息,请参阅 将 SAML 身份提供者与用户池配合使用。