如何在 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 应用程序

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

注册一个 LinkedIn 账户

LinkedIn 网站的注册页面上输入您的电子邮件地址和密码,以开始注册。如果您已经拥有一个 LinkedIn 账户,请登录

创建 LinkedIn 应用程序

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

从 Auth0 连接到 LinkedIn

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

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

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

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

  1. Amazon Cognito 控制台中,进入您的用户群体管理页面,在联合身份验证下,选择身份提供商
  2. 选择 OpenID Connect
  3. 对于 OIDC 提供商详细信息,请输入您的 Auth0 应用程序详细信息,如下所述:
    对于提供商名称,请输入一个名称(例如 Auth0-LinkedIn)。此名称将显示在 Amazon Cognito 托管 Web UI 中。
    注意:您无法在创建提供商后更改此字段。
    对于客户端 ID,请输入您之前从 Auth0 应用程序中复制的客户端 ID
    对于客户端密钥(可选),请输入您之前从 Auth0 应用程序中复制的客户端密钥
    对于属性请求方法,将设置保留为 GET
    对于授权范围,输入 openid 配置文件电子邮件
    对于发布者,输入您的 Auth0 配置文件 URL。例如 https://tenantName.auth0.com,以将 tenantName 替换为您的 Auth0 租户名称
    对于标识符(可选),您可以选择输入自定义字符串,以便稍后替代 OIDC 提供商的名称在终端节点 URL 中使用。
  4. 选择运行发现以获取 Auth0 的 OIDC 配置终端节点。
  5. 选择 Create provider(创建提供商)。

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

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

  1. 在用户群体的 Amazon Cognito 控制台管理页面的 App integration(应用程序集成)下,选择 App client settings(应用程序客户端设置)。
  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. 选择 Save changes(保存更改)。

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

将 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 控制台中可以找到这些值,它们位于您的用户群体管理页面的 App client settings(应用程序客户端设置)选项卡中。

有关更多信息,请参阅如何为 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 控制台中可以找到这些值,它们位于您的用户群体管理页面的 App client settings(应用程序客户端设置)选项卡中。
  • allowedOauthScopes 替换为您希望您的 Amazon Cognito 应用程序客户端请求的特定范围。