如何在 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 用户池

有关创建这些先决条件的更多信息,请参阅以下文章:

注册 Auth0 账户

注意:如果您已经拥有一个 Auth0 账户,请直接登录

Auth0 网站的注册页面上输入您的电子邮件地址和密码,开始注册。

登录后,请记下您的 Auth0 租户名称

创建 Auth0 应用程序

注意:如果您已创建要使用的 Auth0 应用程序,请继续下一部分。

  1. Auth0 网站控制面板上,选择 + 创建应用程序
  2. 创建应用程序对话框中,输入您的应用程序的名称。例如,My App
  3. Choose an application type下,选择 Single Page Web Applications
  4. 选择创建
  5. 在新应用程序的设置窗格中,执行以下操作:
    找到客户端 ID客户端密钥并复制下它们。稍后,在连接 Auth0 与您的 Amazon Cognito 用户池时,您将需要它们。
    对于允许的回调 URL,输入 https://yourDomainPrefix.auth.region.amazoncognito.com/oauth2/idpresponse
    注意:请将 yourDomainPrefixregion 替换为您的用户池的值。在 Amazon Cognito 控制台中,进入您设为用户池的管理页面,在域名选项卡上可以找到这些值。
  6. 选择保存更改

注册一个 LinkedIn 账户

注意:如果您已经拥有一个 LinkedIn 账户,请直接登录

LinkedIn 网站的注册页面上输入您的电子邮件地址和密码,开始注册。

创建 LinkedIn 应用程序

  1. LinkedIn 开发人员网站上,选择创建应用程序
  2. 创建应用程序页面上,填写所有必填字段和首选字段,以自定义您的 LinkedIn 应用程序, 然后选择创建应用程序
  3. 选择 Auth 窗格。
    注意:权限下,确认 r_emailaddressr_liteprofile 已列出。Auth0 访问所需的 LinkedIn 用户信息时需要这些权限。
  4. 应用程序凭证下,找到客户端 ID客户端密钥并将它们复制下来。稍后,在将 LinkedIn 连接到您的 Auth0 应用程序时,您将需要它们。
  5. OAuth 2.0 设置下的重定向 URL:旁,选择铅笔图标,然后选择+ 添加重定向 URL
  6. 重定向 URL:下,输入 https://tenantName.auth0.com/login/callback,从而将 tenantName 替换为您的 Auth0 租户名称(或 Auth0 自定义域)。

有关更多信息,请参阅 Auth0 网站上的添加 LinkedIn 登录到您的应用程序中

从 Auth0 连接到 LinkedIn

  1. Auth0 网站控制面板上的左侧导航窗格中,选择连接,然后选择社交
  2. 选择 LinkedIn
  3. 在 LinkedIn 对话框的设置窗格中,执行以下操作:
    对于 API 密钥,输入您之前从 LinkedIn 应用程序中复制的客户端 ID
    对于私有密钥,输入您之前从 LinkedIn 应用程序中复制的客户端密钥
    对于属性,选中电子邮件地址复选框。
  4. 选择保存
  5. 在 LinkedIn 对话框的应用程序窗格中,选择您要为其启用 LinkedIn 作为社交 IdP 的应用程序。
  6. 选择保存

有关更多信息,请参阅 Auth0 网站上的添加 LinkedIn 登录到您的应用程序中

测试您的 LinkedIn 与 Auth0 的社交连接

  1. 在 LinkedIn 对话框中,选择试用。或者,在 Auth0 网站控制面板上的左侧导航窗格中,选择连接社交,然后选择 LinkedIn 旁的试用。LinkedIn 登录页面中将打开一个新的浏览器选项卡或窗口。
  2. 使用您的电子邮件地址和密码登录到 LinkedIn。
  3. 在系统提示您是否允许应用程序访问您的 LinkedIn 用户信息时,选择允许

有关更多信息,请参阅 Auth0 网站上的测试社交连接

在您的用户池中添加一个 OIDC 提供商

  1. Amazon Cognito 控制台中,进入您的用户池管理页面,在联合下,选择身份提供商
  2. 选择 OpenID Connect
  3. 对于 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 中使用。
  4. 选择运行发现以获取 Auth0 的 OIDC 配置终端节点。
  5. 选择创建提供商

有关更多信息,请参阅将 OIDC IdP 添加到您的用户池

更改您的用户池的应用程序客户端设置

  1. Amazon Cognito 控制台中,进入您的用户池的管理页面,在应用程序集成下,选择应用程序客户端设置
  2. 在应用程序客户端页面上,执行以下操作:
    启用身份提供商下,选择 OIDC 提供商(例如 Auth0-LinkedIn)和 Cognito 用户池复选项。
    对于回调 URL,输入您希望用户在登录后被重定向至的 URL。如要进行测试,您可以输入任何有效的 URL,如 https://example.com/
    对于注销 URL,输入您希望用户在退出登录后被重定向至的 URL。如要进行测试,您可以输入任何有效的 URL,如 https://example.com/
    允许的 OAuth 流程下,选中授权代码授予隐式授予复选框,或者如果您愿意,选择此两者。
    注意:您启用的允许的 OAuth 流程可用于确定您可以将哪些值(“代码”或“令牌”)用于终端节点 URL 中的 response_type 参数
    允许的 OAuth 范围下,至少选中电子邮件openid 复选框。
  3. 选择保存更改

有关更多信息,请参阅应用程序客户端设置概览

将 Auth0 的属性映射到您的用户池

  1. Amazon Cognito 控制台中,进入您的用户池的管理页面,在联合下,选择属性映射
  2. 在“属性映射”页面上,选择 OIDC 选项卡。
  3. 如果您的用户池中有多个 OIDC 提供商,请从下拉列表中选择新提供商。
  4. 确认 OIDC 属性 sub 已映射到用户池属性 Username
  5. 选择添加 OIDC 属性。对于新的 OIDC 属性,请输入电子邮件。对于用户池属性,选择电子邮件
  6. (可选)添加您要从 Auth0 传递的任何其他 OIDC 属性。例如,您可以将 given_namefamily_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:

  • 请将 yourDomainPrefixregion 替换为您的用户池的值。在 Amazon Cognito 控制台中,进入您设为用户池的管理页面,在域名选项卡上可以找到这些值。
  • 如果您仅在前面为允许的 OAuth 流程选择隐式授权,则将 response_type=code 更改为 response_type=token
  • yourClientId 替换为您的应用程序客户端的 ID,并将 redirectUrl 替换为您的应用程序客户端的回调 URL。在 Amazon Cognito 控制台中,进入您的用户池的管理页面,在应用程序客户端设置选项卡上可以找到这些信息。

有关更多信息,请参阅如何为 Amazon Cognito 配置托管 Web UI?以及授权终端节点

测试终端节点 URL

  1. 在您的 Web 浏览器中输入构建的终端节点 URL。
  2. 使用您的公司 ID 登录下,选择您的 OIDC 提供商名称(例如 Auth0-LinkedIn)。您将被重定向到 Auth0 应用程序的登录页面。
  3. 选择使用 LinkedIn 登录。您将被重定向到 LinkedIn 登录页面。
    注意:如果您被重定向到您的 Amazon Cognito 应用程序客户端的回调 URL,则意味着您已经登录到 LinkedIn。
  4. 在 LinkedIn 登录页面中,输入电子邮件地址(或电话号码)和密码登录您的 LinkedIn 账户。
  5. 选择登录

成功登录后,您将被重定向至应用程序客户端的回调 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:

  • 请将 yourDomainPrefixregion 替换为您的用户池的值。在 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?以及授权终端节点