如何在 Amazon Cognito 用户池中将 LinkedIn 设置为社交身份提供商?
上次更新时间:2019 年 6 月 27 日
我希望我的应用程序用户能够使用 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 用户池
有关创建这些先决条件的更多信息,请参阅以下文章:
- 教程:创建用户池
注意:在创建用户池时,保持选中标准属性 email。有关用户池属性的更多信息,请参阅配置用户池属性。 - 添加应用程序客户端(AWS 管理控制台)
- 为用户池添加域名
注册 Auth0 账户
注意:如果您已经拥有一个 Auth0 账户,请直接登录。
在 Auth0 网站的注册页面上输入您的电子邮件地址和密码,开始注册。
登录后,请记下您的 Auth0 租户名称。
创建 Auth0 应用程序
注意:如果您已创建要使用的 Auth0 应用程序,请继续下一部分。
- 在 Auth0 网站控制面板上,选择 + 创建应用程序。
- 在创建应用程序对话框中,输入您的应用程序的名称。例如,My App。
- 在 Choose an application type下,选择 Single Page Web Applications。
- 选择创建。
- 在新应用程序的设置窗格中,执行以下操作:
找到客户端 ID 和客户端密钥并复制下它们。稍后,在连接 Auth0 与您的 Amazon Cognito 用户池时,您将需要它们。
对于允许的回调 URL,输入 https://yourDomainPrefix.auth.region.amazoncognito.com/oauth2/idpresponse。
注意:请将 yourDomainPrefix 和 region 替换为您的用户池的值。在 Amazon Cognito 控制台中,进入您设为用户池的管理页面,在域名选项卡上可以找到这些值。 - 选择保存更改。
注册一个 LinkedIn 账户
注意:如果您已经拥有一个 LinkedIn 账户,请直接登录。
在 LinkedIn 网站的注册页面上输入您的电子邮件地址和密码,开始注册。
创建 LinkedIn 应用程序
- 在 LinkedIn 开发人员网站上,选择创建应用程序。
- 在创建应用程序页面上,填写所有必填字段和首选字段,以自定义您的 LinkedIn 应用程序, 然后选择创建应用程序。
- 选择 Auth 窗格。
注意:在权限下,确认 r_emailaddress 和 r_liteprofile 已列出。Auth0 访问所需的 LinkedIn 用户信息时需要这些权限。 - 在应用程序凭证下,找到客户端 ID 和客户端密钥并将它们复制下来。稍后,在将 LinkedIn 连接到您的 Auth0 应用程序时,您将需要它们。
- 在 OAuth 2.0 设置下的重定向 URL:旁,选择铅笔图标,然后选择+ 添加重定向 URL。
- 在重定向 URL:下,输入 https://tenantName.auth0.com/login/callback,从而将 tenantName 替换为您的 Auth0 租户名称(或 Auth0 自定义域)。
有关更多信息,请参阅 Auth0 网站上的添加 LinkedIn 登录到您的应用程序中。
从 Auth0 连接到 LinkedIn
- 在 Auth0 网站控制面板上的左侧导航窗格中,选择连接,然后选择社交。
- 选择 LinkedIn。
- 在 LinkedIn 对话框的设置窗格中,执行以下操作:
对于 API 密钥,输入您之前从 LinkedIn 应用程序中复制的客户端 ID。
对于私有密钥,输入您之前从 LinkedIn 应用程序中复制的客户端密钥。
对于属性,选中电子邮件地址复选框。 - 选择保存。
- 在 LinkedIn 对话框的应用程序窗格中,选择您要为其启用 LinkedIn 作为社交 IdP 的应用程序。
- 选择保存。
有关更多信息,请参阅 Auth0 网站上的添加 LinkedIn 登录到您的应用程序中。
测试您的 LinkedIn 与 Auth0 的社交连接
- 在 LinkedIn 对话框中,选择试用。或者,在 Auth0 网站控制面板上的左侧导航窗格中,选择连接、社交,然后选择 LinkedIn 旁的试用。LinkedIn 登录页面中将打开一个新的浏览器选项卡或窗口。
- 使用您的电子邮件地址和密码登录到 LinkedIn。
- 在系统提示您是否允许应用程序访问您的 LinkedIn 用户信息时,选择允许。
有关更多信息,请参阅 Auth0 网站上的测试社交连接。
在您的用户池中添加一个 OIDC 提供商
- 在 Amazon Cognito 控制台中,进入您的用户池管理页面,在联合下,选择身份提供商。
- 选择 OpenID Connect。
- 对于 OIDC 提供商详细信息,请输入您的 Auth0 应用程序详细信息,如下所述:
对于提供商名称,请输入一个名称(例如 Auth0-LinkedIn)。此名称将显示在 Amazon Cognito 托管 Web UI 中。
注意:您无法在创建提供商后更改此字段。如果您计划将此字段包括在您的应用程序中或使用 Amazon Cognito 托管的 Web UI,请使用一个让您的应用程序用户看得舒服的名称。
对于客户端 ID,请输入您之前从 Auth0 应用程序中复制的客户端 ID。
对于客户端密钥(可选),请输入您之前从 Auth0 应用程序中复制的客户端密钥。
对于属性请求方法,将设置保留为 GET。
对于授权范围,输入 openid 配置文件电子邮件。
对于发布者,输入您的 Auth0 配置文件 URL。例如 https://tenantName.auth0.com,以将 tenantName 替换为您的 Auth0 租户名称。
对于标识符(可选),您可以选择输入自定义字符串,以便稍后替代 OIDC 提供商的名称在终端节点 URL 中使用。 - 选择运行发现以获取 Auth0 的 OIDC 配置终端节点。
- 选择创建提供商。
有关更多信息,请参阅将 OIDC IdP 添加到您的用户池。
更改您的用户池的应用程序客户端设置
- 在 Amazon Cognito 控制台中,进入您的用户池的管理页面,在应用程序集成下,选择应用程序客户端设置。
- 在应用程序客户端页面上,执行以下操作:
在启用身份提供商下,选择 OIDC 提供商(例如 Auth0-LinkedIn)和 Cognito 用户池复选项。
对于回调 URL,输入您希望用户在登录后被重定向至的 URL。如要进行测试,您可以输入任何有效的 URL,如 https://example.com/。
对于注销 URL,输入您希望用户在退出登录后被重定向至的 URL。如要进行测试,您可以输入任何有效的 URL,如 https://example.com/。
在允许的 OAuth 流程下,选中授权代码授予或隐式授予复选框,或者如果您愿意,选择此两者。
注意:您启用的允许的 OAuth 流程可用于确定您可以将哪些值(“代码”或“令牌”)用于终端节点 URL 中的 response_type 参数。
在允许的 OAuth 范围下,至少选中电子邮件和 openid 复选框。 - 选择保存更改。
有关更多信息,请参阅应用程序客户端设置概览。
将 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 控制台中,进入您的用户池的管理页面,在应用程序客户端设置选项卡上可以找到这些信息。
有关更多信息,请参阅如何为 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 控制台中,进入您的用户池的管理页面,在应用程序客户端设置选项卡上可以找到这些信息。
- 将 allowedOauthScopes 替换为您希望您的 Amazon Cognito 应用程序客户端请求的特定范围。
有关更多信息,请参阅如何为 Amazon Cognito 配置托管 Web UI?以及授权终端节点。