本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在用户池中使用OIDC身份提供商
用户可以使用 OpenID Connect (OIDC) 身份提供商 (IdPs) 提供的现有账户登录您的应用程序。通过提供OIDC商,独立单点登录系统的用户可以提供现有凭据,而您的应用程序则以用户池共享格式接收OIDC令牌。用户池是一个 OIDC IdP,它也可以充当多个外部应用程序OIDC IdPs 和您的应用程序之间的中间依赖方。
使用 OIDC IdP 登录的用户无需提供新的凭据或信息即可访问您的用户池应用程序。您的应用程序可以静默地将他们重定向到其 IdP 进行登录,在后台使用用户池作为工具,用于标准化应用程序的令牌格式。要了解有关 IdP 重定向的更多信息,请参阅。对端点授权
与其他第三方身份提供商一样,您必须向OIDC提供商注册您的应用程序,并获取有关要连接到用户池的 IdP 应用程序的信息。用户池 OIDC IdP 需要客户端 ID、客户机密钥、您要请求的范围以及有关提供商服务端点的信息。您的用户池可以从发现OIDC端点发现提供商端点,也可以手动输入。您还必须检查提供商 ID 令牌,并在 IdP 和用户池中的属性之间创建属性映射。
注意
通过第三方(联合身份验证)进行登录可在 Amazon Cognito 用户池中实现。此功能独立于与 Amazon Cognito 身份池的OIDC联合。
您可以通过 AWS Management Console、或使用用户池方法将 OIDC IdP 添加到您的用户池API中。 AWS CLICreateIdentityProvider
先决条件
在开始之前,您需要:
-
具有应用程序客户端和用户池域的用户池。有关更多信息,请参阅创建用户池。
-
具有以下OIDC配置的 IdP:
-
支持
client_secret_post
客户端身份验证。Amazon Cognito 不会在OIDC发现端点处检查你的 IdP 的token_endpoint_auth_methods_supported
声明。Amazon Cognito 不支持client_secret_basic
客户端身份验证。有关客户端验证的更多信息,请参阅 OpenID Connect 文档中的客户端身份验证。 -
仅HTTPS用于OIDC端点
openid_configuration
,例如userInfo
、和jwks_uri
。 -
端OIDC点仅使用TCP端口 80 和 443。
-
仅使用 HMAC-SHA ECDSA、或RSA算法对 ID 令牌进行签名。
-
在密钥的
jwks_uri
处发布密钥 IDkid
声明,并在其令牌中包含kid
声明。 -
提供带有有效根 CA 信任链的未过期公钥。
-
步骤 1:向 I OIDC dP 注册
在使用 Amazon Cognito 创建 OIDC IdP 之前,您必须向 OIDC IdP 注册您的应用程序才能接收客户端 ID 和客户端密钥。
向 OIDC IdP 注册
-
使用 I OIDC dP 创建开发者账户。
链接到 OIDC IdPsOIDCIdP 如何安装 OIDC发现 URL Salesforce https://login.salesforce.com
Ping Identity https://
Your Ping domain address
:9031/idp/userinfo.openid例如:
https://pf.company.com:9031/idp/userinfo.openid
Okta https://
Your Okta subdomain
.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 URL 使用
/oauth2/idpresponse
终端节点注册您的用户池域。这样可以确保 OIDC IdP 稍后在对用户进行身份验证时接受来自 Amazon Cognito 的请求。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 声明 的访问权限。 -
I OIDC dP 为您提供客户端 ID 和客户机密钥。当您在用户池中设置 OIDC IdP 时,您将使用它们。
示例:将 Salesforce 用作OIDC用户池中的 IdP
当你想在OIDC兼容的 OIDC IdP(例如 Salesforce)和你的用户池之间建立信任时,你可以使用 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(新连接的应用程序)。
-
完成必填句段。
在 “开始” 下URL,URL在使用您的 Salesforce IdP 登录的用户池域的
/authorize
终端节点处输入 a。当您的用户访问您的关联应用程序时,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
-
在 Callback URL 中启用OAuth设置并输入用户池域的
/oauth2/idpresponse
终端节点URL。这是 Salesforce 发布授权码URL的地方,Amazon Cognito 用该代码兑换令牌。OAuthhttps://
mydomain.us-east-1.amazoncognito.com
/oauth2/idpresponse
-
-
选择 scopes
(范围)。您必须包含范围 openid。要授予对 email 和 email_verified 声明 的访问权限,请添加 email(电子邮件)范围。通过空格分隔范围。 -
选择 Create(创建)。
在 Salesforce 中,客户端 ID 称为 Consumer Key(使用者密钥),客户端密钥为 Consumer Secret(使用者私有密钥)。记下您的客户端 ID 和客户端密钥。您将在下一节中使用它们。
第 2 步:将 I OIDC dP 添加到您的用户池
在本节中,您将配置用户池以处理来自 OIDC IdP OIDC 的基于身份验证的请求。
添加 OIDC IdP(亚马逊 Cognito 控制台)
添加 I OIDC dP
-
转到 Amazon Cognito 控制台
。如果出现提示,请输入您的 AWS 凭据。 -
从导航菜单中选择 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
)。按照 OAuth2.0规范,作用域必须用空格分隔。 您的用户需要同意向您的应用程序提供这些属性。
-
选择一种属性请求方法,为 Amazon Cognito 提供从您的提供商运营的userInfo终端节点获取用户详细信息时必须使用的HTTP方法(GET或之一POST)。
-
选择一种设置方法,通过自动填写签发者URL或手动输入来检索 OpenID Connect 端点。URL如果您的提供商拥有公共
.well-known/openid-configuration
终端节点,Amazon Cognito 可以在其中检索、、和jwks_uri
终端节点authorization
token
userInfo
,则使用自动填充发卡机构。URLs -
输入您的 IdP 的颁发者URL或
authorization
token
userInfo
、、和jwks_uri
终端节点URLs。注意
URL应该以斜线开头
https://
,不应以斜杠/
结尾。只能使用端口号 443 和 80。URL例如,Salesforce 使用以下URL方法:https://login.salesforce.com
如果选择 auto fill,则发现文档必须使用HTTPS以下值:
authorization_endpoint
token_endpoint
、userinfo_endpoint
、和jwks_uri
。否则,登录将失败。 -
默认情况下OIDC,claim sub 映射到用户池属性 “用户名”。您可以将其他OIDC声明
映射到用户池属性。输入OIDC声明,然后从下拉列表中选择相应的用户池属性。例如,声明 email 通常会映射到用户池属性 Email(电子邮件)。 -
请将 IdP 的属性映射到您的用户池。有关更多信息,请参阅指定适用于用户池的身份提供程序属性映射。
-
选择 Create(创建)。
-
从 App client integration(应用程序客户端集成)选项卡上的列表中选择一个 App clients(应用程序客户端),然后选择 Edit hosted UI settings(编辑托管 UI 设置)。将新 OIDC IdP 添加到身份提供商下的应用程序客户端。
-
选择 Save changes(保存更改)。
添加 I OIDC dP ()AWS 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 配置
您可以使用前两节中的元素来创建授权URL,并使用它们来测试 OIDC IdP 配置。
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进行身份验证后您的用户将被重定向的页面。