如何在 Amazon Cognito 用户群体中将 LinkedIn 设置为社交身份提供商?
上次更新日期:2022 年 9 月 15 日
我希望我的应用程序用户能够使用 LinkedIn 登录。如何在 Amazon Cognito 用户群体中将 LinkedIn 设置为社交身份提供者(IdP)?
简短描述
LinkedIn 不提供 Amazon Cognito 在添加 OpenID Connect (OIDC) 提供者到用户群体时需要的所有字段。
您必须将第三方服务用作 LinkedIn 与 Amazon Cognito 的中间代理,如 Auth0。Auth0 从 LinkedIn 获得身份,而 Amazon Cognito 从 Auth0 获得身份。
注意:Auth0 是不隶属于 AWS 的第三方服务。使用 Auth0 可能会产生单独的费用。
您也可以对存在类似集成问题的其他社交 IdP 使用此设置。有关更多信息,请参阅 Auth0 网站上的身份提供商。
解决方法
创建具有应用程序客户端和域名的 Amazon Cognito 用户群体
有关创建这些先决条件的更多信息,请参阅以下文章:
- 教程:创建用户群体
注意:在创建用户群体时,保持选中标准属性电子邮件。 - 配置用户群体应用程序客户端
- 为用户群体添加域名
注册 Auth0 账户
在 Auth0 网站注册页面上输入您的电子邮件地址和密码即可开始。如果您已经拥有一个 Auth0 账户,请登录。登录后,请记下您的 Auth0 租户名称。
创建 Auth0 应用程序
- 在 Auth0 网站控制面板上,选择 + 创建应用程序。
注意:如果您已创建要使用的 Auth0 应用程序,请继续下一部分。 - 在 Create Application(创建应用程序)对话框中,输入您的应用程序的名称。例如,My App。
- 在 Choose an application type下,选择 Single Page Web Applications。
- 选择创建。
- 在新应用程序的 Settings(设置)窗格中,执行以下操作:
找到 Client ID(客户端 ID)和 Client Secret(客户端密钥)并复制下它们。稍后,在连接 Auth0 与您的 Amazon Cognito 用户群体时,您将需要它们。
对于允许的回调 URL,输入 https://yourDomainPrefix.auth.region.amazoncognito.com/oauth2/idpresponse。
注意:请将 yourDomainPrefix 和 region 替换为您的用户池的值。在 Amazon Cognito 控制台中可以找到这些值,它们位于您的用户群体管理页面的域名选项卡中。 - 选择 Save changes(保存更改)。
注册一个 LinkedIn 账户
在 LinkedIn 网站的注册页面上输入您的电子邮件地址和密码,以开始注册。如果您已经拥有一个 LinkedIn 账户,请登录。
创建 LinkedIn 应用程序
- 在 LinkedIn 开发人员网站上,选择创建应用程序。
- 在创建应用程序页面上,填写所有必填字段和首选字段,以自定义您的 LinkedIn 应用程序, 然后选择创建应用程序。
- 选择 Auth 选项卡。确认已列出 r_emailaddress 和 r_liteprofile。Auth0 访问所需的 LinkedIn 用户信息时需要这些权限。
注意:如果您还未看到列出的 r_emailaddress 和 r_liteprofile,则将产品 "Sign In with LinkedIn"(使用 LinkedIn 登录)添加至您的应用程序。这可以在您的 LinkedIn 开发页面的 Products(产品)选项卡上找到。 - 在应用程序凭证下,找到客户端 ID 和客户端密钥并将复制。稍后将 LinkedIn 连接到您的 Auth0 应用程序时,您需要这两者。
- 在 OAuth 2.0 设置下的 Redirect URLs: 旁,选择铅笔图标,然后选择 + 添加重定向 URL。
- 在 Redirect URLs: 下,输入 https://tenantName.us.auth0.com/login/callback,从而将 tenantName 替换为您的 Auth0 租户名称(或 Auth0 自定义域)。
从 Auth0 连接到 LinkedIn
- 在 Auth0 网站控制面板上的左侧导航窗格中,选择身份验证,然后选择社交。
- 选择 LinkedIn。
- 在 LinkedIn 对话框的设置窗格中,执行以下操作:
对于 API 密钥,输入您之前从 LinkedIn 应用程序中复制的客户端 ID。
对于私有密钥,输入您之前从 LinkedIn 应用程序中复制的客户端密钥。
对于属性,选中电子邮件地址复选框。 - 选择 Save(保存)。
- 在 LinkedIn 对话框的应用程序窗格中,选择您要为其启用 LinkedIn 作为社交 IdP 的应用程序。
- 选择 Save(保存)。
测试您的 LinkedIn 与 Auth0 的社交连接
- 在 LinkedIn 对话框中,选择试用。或者,在 Auth0 网站控制面板上的左侧导航窗格中,选择连接、社交,然后选择 LinkedIn 旁的试用。LinkedIn 登录页面中将打开一个新的浏览器选项卡或窗口。
- 使用您的电子邮件地址和密码登录到 LinkedIn。
- 在系统提示您是否允许应用程序访问您的 LinkedIn 用户信息时,选择 Allow(允许)。
在您的用户池中添加一个 OIDC 提供商
- 在 Amazon Cognito 控制台中,进入您的用户群体管理页面,在联合身份验证下,选择身份提供商。
- 选择 OpenID Connect。
- 对于 OIDC 提供商详细信息,请输入您的 Auth0 应用程序详细信息,如下所述:
对于提供商名称,请输入一个名称(例如 Auth0-LinkedIn)。此名称将显示在 Amazon Cognito 托管 Web UI 中。
注意:您无法在创建提供商后更改此字段。
对于客户端 ID,请输入您之前从 Auth0 应用程序中复制的客户端 ID。
对于客户端密钥(可选),请输入您之前从 Auth0 应用程序中复制的客户端密钥。
对于属性请求方法,将设置保留为 GET。
对于授权范围,输入 openid 配置文件电子邮件。
对于发布者,输入您的 Auth0 配置文件 URL。例如 https://tenantName.auth0.com,以将 tenantName 替换为您的 Auth0 租户名称。
对于标识符(可选),您可以选择输入自定义字符串,以便稍后替代 OIDC 提供商的名称在终端节点 URL 中使用。 - 选择运行发现以获取 Auth0 的 OIDC 配置终端节点。
- 选择 Create provider(创建提供商)。
有关更多信息,请参阅将 OIDC IdP 添加到您的用户池。
更改您的用户群体的应用程序客户端设置
- 在用户群体的 Amazon Cognito 控制台管理页面的 App integration(应用程序集成)下,选择 App client settings(应用程序客户端设置)。
- 在应用程序客户端页面上,执行以下操作:
在启用身份提供商下,选择 OIDC 提供商(例如 Auth0-LinkedIn)和 Cognito 用户池复选项。
对于回调 URL,输入您希望用户在登录后被重定向至的 URL。如要进行测试,您可以输入任何有效的 URL,如 https://example.com/。
对于注销 URL,输入您希望用户在退出登录后被重定向至的 URL。如要进行测试,您可以输入任何有效的 URL,如 https://example.com/。
在允许的 OAuth 流程下,选中授权代码授予或隐式授予其中之一复选框,或者或同时选择两者。
注意:您启用的允许的 OAuth 流程可用于确定您可以将哪些值(“代码”或“令牌”)用于端点 URL 中的 response_type 参数。
在允许的 OAuth 范围下,至少选中电子邮件和 openid 复选框。 - 选择 Save changes(保存更改)。
有关更多信息,请参阅应用程序客户端设置术语。
将 Auth0 的属性映射到您的用户群体
- 在 Amazon Cognito 控制台中,进入您的用户群体的管理页面,在联合身份验证下,选择属性映射。
- 在“属性映射”页面上,选择 OIDC 选项卡。
- 如果您的用户池中有多个 OIDC 提供商,请从下拉列表中选择新提供商。
- 确认 OIDC 属性 sub 已映射到用户群体属性 Username。
- 选择添加 OIDC 属性。对于新的 OIDC 属性,请输入电子邮件。对于用户池属性,选择电子邮件。
- (可选)添加您要从 Auth0 传递的任何其他 OIDC 属性。例如,您可以将 given_name 和 family_name 映射到相应的 Amazon Cognito 用户池属性。
注意:要查看为 Auth0 用户存储的 OIDC 属性,从 Auth0 网站控制面板中的左侧导航窗格中选择用户和角色,选择用户,从中选择一名用户,然后选择原始 JSON。
有关更多信息,请参阅为用户群体指定身份提供商属性映射。
构建端点 URL
使用您自己的设置中的值构建此端点 URL:
https://yourDomainPrefix.auth.region.amazoncognito.com/oauth2/authorize?response_type=code&client_id=yourClientId&redirect_uri=redirectUrl
执行以下操作为您的设置自定义 URL:
- 请将 yourDomainPrefix 和 region 替换为您的用户池的值。在 Amazon Cognito 控制台中可以找到这些值,它们位于您的用户群体管理页面的域名选项卡中。
- 如果您仅在前面为允许的 OAuth 流程选择隐式授权,则将 response_type=code 更改为 response_type=token。
- 将 yourClientId 替换为您的应用程序客户端的 ID,并将 redirectUrl 替换为您的应用程序客户端的回调 URL。在 Amazon Cognito 控制台中可以找到这些值,它们位于您的用户群体管理页面的 App client settings(应用程序客户端设置)选项卡中。
有关更多信息,请参阅如何为 Amazon Cognito 配置托管 Web UI?以及授权端点。
测试端点 URL
- 在您的 Web 浏览器中输入构建的端点 URL。
- 在使用您的公司 ID 登录下,选择您的 OIDC 提供商名称(例如 Auth0-LinkedIn)。您将被重定向到 Auth0 应用程序的登录页面。
- 选择使用 LinkedIn 登录。您将被重定向到 LinkedIn 登录页面。
注意:如果您被重定向到您的 Amazon Cognito 应用程序客户端的回调 URL,那么您已经登录到 LinkedIn。 - 在 LinkedIn 登录页面中,输入电子邮件地址(或电话号码)和密码登录您的 LinkedIn 账户。
- 选择登录。
成功登录后,您将被重定向至应用程序客户端的回调 URL。授权代码或用户群体令牌显示在 Web 浏览器地址栏的 URL 中。
(可选)跳过 Amazon Cognito 托管 UI
如果您希望您的用户在登录应用程序时跳过 Amazon Cognito 托管 Web UI,则将此 UI 用作端点 URL:
https://yourDomainPrefix.auth.region.amazoncognito.com/oauth2/authorize?response_type=code&identity_provider=oidcProviderName&client_id=yourClientId&redirect_uri=redirectUrl&scope=allowedOauthScopes
执行以下操作为您的设置自定义 URL:
- 请将 yourDomainPrefix 和 region 替换为您的用户池的值。在 Amazon Cognito 控制台中可以找到这些值,它们位于您的用户群体管理页面的域名选项卡中。
- 如果您仅在前面为允许的 OAuth 流程选择隐式授权,则将 response_type=code 更改为 response_type=token。
- 将 oidcProviderName 替换为您的用户池中的 OIDC 提供商名称。例如 Auth0-LinkedIn。
- (可选)如果您之前在标识符(可选)字段中为您的 OIDC 提供商添加了一个标识符,您可以将 identity_provider=oidcProviderName 替换为 idp_identifier=idpIdentifier,从而将 idpIdentifier 替换为您的自定义标识符字符串。
- 将 yourClientId 替换为您的应用程序客户端的 ID,并将 redirectUrl 替换为您的应用程序客户端的回调 URL。在 Amazon Cognito 控制台中可以找到这些值,它们位于您的用户群体管理页面的 App client settings(应用程序客户端设置)选项卡中。
- 将 allowedOauthScopes 替换为您希望您的 Amazon Cognito 应用程序客户端请求的特定范围。