本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 OIDC 身份提供商与用户池配合使用
您可以让已经拥有 OpenID Connect (OIDC)
注意
通过第三方(联合身份验证)进行登录可在 Amazon Cognito 用户池中实现。此特征不依赖于通过 Amazon Cognito 身份池(联合身份)实现的联合身份验证。
您可以通过 Amazon Web Services Management Console、或使用用户池 API 方法将 OIDC IdP 添加到您的用户池中。 Amazon CLICreateIdentityProvider
先决条件
在开始之前,您需要:
-
具有应用程序客户端和用户池域的用户池。有关更多信息,请参阅创建用户池。
-
具有以下配置的 OIDC IdP:
-
支持
client_secret_post
客户端身份验证。Amazon Cognito 不在 IdP 的 OIDC 发现端点上检查token_endpoint_auth_methods_supported
声明。Amazon Cognito 不支持client_secret_basic
客户端身份验证。有关客户端验证的更多信息,请参阅 OpenID Connect 文档中的客户端身份验证。 -
仅对 OIDC 端点使用 HTTPS,例如
openid_configuration
、userInfo
和jwks_uri
。 -
仅为 OIDC 端点使用 TCP 端口 80 和 443。
-
只能使用 HMAC-SHA、ECDSA 或 RSA 算法对 ID 令牌进行签名。
-
在密钥的
jwks_uri
处发布密钥 IDkid
声明,并在其令牌中包含kid
声明。 -
提供带有有效根 CA 信任链的未过期公钥。
-
步骤 1:向 OIDC IdP 注册
在使用 Amazon Cognito 创建 OIDC IdP 之前,必须向 OIDC IdP 注册应用程序才能接收客户端 ID 和客户端密钥。
向 OIDC IdP 注册
-
使用 OIDC IdP 创建开发人员账户。
与 OIDC 的链接 IdPsOIDC IdP 如何安装 OIDC 发现 URL Salesforce https://login.salesforce.com
Ping Identity https://
您的 Ping 域地址
:9031/idp/userinfo.openid例如:
https://pf.company.com:9031/idp/userinfo.openid
Okta https://
您的 Okta 子域
.oktapreview.com或者
https://
Your Okta subdomain
.okta.comMicrosoft Azure Active Directory (Azure AD) https://login.microsoftonline.com/
{tenant}
/v2.0Google https://accounts.google.com
注意
Amazon Cognito 提供 Google 作为集成社交登录 IdP。建议使用集成 IdP。请参阅 在用户池中使用社交身份提供商。
-
向 OIDC IdP 注册具有
/oauth2/idpresponse
端点的用户池域 URL。这将确保 OIDC IdP 之后在对用户进行身份验证时通过 Amazon Cognito 接受此 URL。https://
mydomain.us-east-1.amazoncognito.com
/oauth2/idpresponse -
向 Amazon Cognito 用户池注册回调 URL。这是成功身份验证后 Amazon Cognito 将您的用户重定向到的页面的 URL。
https://
www.example.com
-
选择 scopes
(范围)。范围 openid 为必填字段。需要 email(电子邮件)范围来授予对 email 和 email_verified 声明 的访问权限。 -
OIDC IdP 为您提供客户端 ID 和客户端密钥。您在用户池中设置 OIDC IdP 时将使用它们。
示例:使用 Salesforce 作为用户池的 OIDC IdP
当您要在与 OIDC 兼容的 IdP(如 Salesforce)和您的用户池之间建立信任时,请使用 OIDC IdP。
-
在 Salesforce 开发人员网站上创建账户
。 -
请在 Salesforce 页面上,执行以下操作之一:
-
如果您使用的是 Lightning Experience,请选择设置齿轮图标,然后选择 Setup Home(设置主页)。
-
如果您使用的是 Salesforce Classic 并且在用户界面标题中看到 Setup(设置),请选择它。
-
如果您使用的是 Salesforce Classic 但没有在用户界面标题中看到 Setup(设置),请从顶部导航栏中选择您的姓名,然后从下拉列表中选择 Setup(设置)。
-
-
在左侧导航栏上,选择 Company Settings(公司设置)。
-
在导航栏上,选择 Domain(域),输入一个域,然后选择 Create(创建)。
-
在左侧导航栏上,选择在 Platform Tools(平台工具)下的 Apps(应用程序)。
-
选择 App Manager(应用程序管理器)。
-
-
选择 New connected app(新连接的应用程序)。
-
完成必填句段。
在 Start URL(启动 URL)下,在
/authorize
终端节点处输入使用您的 Salesforce IdP 登录的用户池域的 URL。当您的用户访问您连接的应用程序时,Salesforce 会将他们定向到此 URL 以完成登录。然后 Salesforce 将用户重定向到与应用程序客户端关联的回调 URL。https://
mydomain.us-east-1.amazoncognito.com
/authorize?response_type=code&client_id=<your_client_id>
&redirect_uri=https://www.example.com
&identity_provider=CorpSalesforce
-
启用 OAuth settings(OAuth 设置),然后在 Callback URL(回调 URL)中输入用户池域的
/oauth2/idpresponse
终端节点的 URL。这是 Salesforce 发出授权码的 URL,Amazon Cognito 会用该代码交换 OAuth 令牌。https://
mydomain.us-east-1.amazoncognito.com
/oauth2/idpresponse
-
-
选择 scopes
(范围)。您必须包含范围 openid。要授予对 email 和 email_verified 声明 的访问权限,请添加 email(电子邮件)范围。通过空格分隔范围。 -
选择 Create(创建)。
在 Salesforce 中,客户端 ID 称为 Consumer Key(使用者密钥),客户端密钥为 Consumer Secret(使用者私有密钥)。记下您的客户端 ID 和客户端密钥。您将在下一节中使用它们。
步骤 2:将 OIDC IdP 添加到用户池
在本节中,配置用户池以通过 OIDC IdP 处理基于 OIDC 的身份验证请求。
添加 OIDC IdP(Amazon Cognito 控制台)
添加 OIDC IdP
-
转到 Amazon Cognito 控制台
。如果出现提示,请输入您的 Amazon 凭据。 -
从导航菜单中选择 User Pools(用户池)。
-
从列表中选择一个现有用户池,或创建一个用户池。
-
选择 Sign-in experience(登录体验)选项卡。找到 Federated sign-in(联合登录),然后选择 Add an identity provider(添加身份提供商)。
-
选择一个 OpenID Connect IdP。
-
在 Provider name(提供商名称)中输入一个唯一名称。
-
将您从提供商那里收到的客户端 ID 输入到 Client ID(客户端 ID)。
-
将您从提供商那里收到的客户端密钥输入到 Client secret(客户端密钥)。
-
为该提供商输入 Authorized scopes(授权范围)。范围定义了应用程序将向您的提供商请求的用户属性组(例如
name
和email
)。根据 OAuth 2.0规范,范围必须以空格分隔。 您的用户需要同意向您的应用程序提供这些属性。
-
请选择一个 Attribute request method(属性请求方法),以便为 Amazon Cognito 提供 HTTP 方法(GET 或 POST),它必须使用该方法从提供商运营的 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。注意
URL 应该以
https://
开头,并且不应以下斜杠/
结尾。只有端口号 443 和 80 可用于此 URL。例如,Salesforce 使用以下 URL:https://login.salesforce.com
如果选择自动填充,则发现文档必须对以下值使用 HTTPS:
authorization_endpoint
、token_endpoint
、userinfo_endpoint
和jwks_uri
。否则,登录将失败。 -
默认情况下,sub OIDC 声明将映射到用户池 Username(用户名)属性中。您可以将其他 OIDC 声明
映射到用户池属性。输入 OIDC 声明,然后从下拉列表中选择对应的用户池属性。例如,声明 email 通常会映射到用户池属性 Email(电子邮件)。 -
请将 IdP 的属性映射到您的用户池。有关更多信息,请参阅指定适用于用户池的身份提供程序属性映射。
-
选择 Create(创建)。
-
从 App client integration(应用程序客户端集成)选项卡上的列表中选择一个 App clients(应用程序客户端),然后选择 Edit hosted UI settings(编辑托管 UI 设置)。将新的 OIDC IdP 添加到 Identity providers(身份提供商)下的应用程序客户端。
-
选择 Save changes(保存更改)。
添加 OIDC IdP (Amazon CLI)
-
请参阅 CreateIdentityProviderAPI 方法的参数描述。
aws cognito-idp create-identity-provider --user-pool-id
string
--provider-namestring
--provider-type OIDC --provider-detailsmap
--attribute-mappingstring
--idp-identifiers (list) --cli-input-jsonstring
--generate-cli-skeletonstring
使用此提供商详细信息映射:
{ "client_id": "string", "client_secret": "string", "authorize_scopes": "string", "attributes_request_method": "string", "oidc_issuer": "string", "authorize_url": "string", "token_url": "string", "attributes_url": "string", "jwks_uri": "string" }
步骤 3:测试 OIDC IdP 配置
可以通过使用上两节中的元素并使用这些元素测试 OIDC IdP 配置来创建授权 URL。
https://
mydomain.us-east-1.amazoncognito.com
/oauth2/authorize?response_type=code&client_id=1example23456789
&redirect_uri=https://www.example.com
您可以在用户池 Domain name(域名)控制台页上找到您的域。您可以在 General settings(常规设置)页面上找到 client_id。对于 redirect_uri 参数,使用您的回调 URL。这是页面的 URL,在页面中,您的用户在身份验证成功后将被重定向。