单点登录 (SSO) 解决方案允许用户输入一次凭据并同时访问多个系统。 IT 管理员可以使用本地 SSO 服务器或第三方服务来管理身份验证,从而实现集中访问管理。 SSO 解决方案增强了管理能力,对快速发展的公司非常有利。

在本文中,您将了解如何使用 AWS Cognito 和AzureAD在您的应用程序上实施单点登录。

什么是单点登录 (SSO)?

单点登录 (SSO) 是一种系统,可将各种应用程序的多个登录窗口替换为单个登录窗口。使用 SSO,用户可以通过在单个页面上输入一次登录信息(用户名、密码等)来访问其所有 SaaS 服务。企业、小型组织和个人都可以使用 SSO 来更轻松地管理各种身份和密码。

就像生活中的其他事情一样,使用单点登录身份验证方法有其优点和缺点。 SSO 的一大优点是它允许用户跨多个应用程序记住和管理更少的用户名和密码。另一方面,SSO 的问题是,如果用户忘记了他们的凭据并且无法检索它们,他们就会被锁定在与其连接的各种系统之外。

SSO 是如何工作的?

每次用户登录时,SSO 服务都会生成一个身份验证令牌以跟踪其验证状态。身份验证令牌是保存在 SSO 服务服务器或用户浏览器中的一段数字数据,类似于用户提供的临时 ID 卡。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--IWiQW2j4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2304/0%2Aei9w6R0-WPZZ_7BR)

_图片来源:双章鱼

SSO 服务将对用户访问的每个应用程序进行检查。应用程序从 SSO 服务接收用户的身份验证令牌,并向用户授予单点登录访问权限。 SSO 服务将提示用户登录(如果他们尚未登录)。

由于它不维护用户身份,因此 SSO 服务可能并不总是记住用户是谁。大多数 SSO 系统通过交叉引用用户凭证和附加的身份管理服务来运行。

如何使用 AWS Cognito 和 Azure AD 实施 SSO

AWS Cognito 是一种 Web 和移动应用程序身份验证、授权和用户管理服务。有了它,用户可以使用用户名和密码或 Azure AD、亚马逊或谷歌等第三方服务登录。 AWS Cognito 有两个主要组件; User pools(允许用户登录的用户目录)和 Identity pools(允许用户访问其他 AWS 服务)。用户池和身份池可以单独使用,也可以联合使用。

另一方面,Azure Active Directory (Azure AD) 是面向企业的基于云的身份和访问管理 (IAM) 解决方案。您可以将其视为 Office 365 系统的主干,它与本地 Active Directory 同步,并为其他基于云的应用程序提供 OAuth 身份验证。

Azure AD 将充当身份提供商 (IdP),AWS Cognito 将充当服务提供商 (SP)。

在授予用户对 AWS 服务的访问权限之前,AWS Cognito 会向身份提供商验证用户的权限,同时 Azure AD 检查用户身份(例如电子邮件、密码)并向 AWS Cognito 断言用户应该有权访问,并且如果用户有访问权限,则表明用户身份是合法的。单点登录身份验证基于以下步骤:

  • 用户访问应用程序,该应用程序将他们发送到 AWS Cognito 托管的网站。

  • AWS Cognito 确定用户的来源(通过客户端 ID、应用程序子域等)并将他们引导到身份提供商进行身份验证。在我们的例子中,访问 Azure Active Directory 登录页面。这是对 SAML 身份验证的请求。

  • 用户被重定向到其浏览器上的 SSO URL。用户已经与身份提供者有一个活动的浏览器会话,或者通过登录创建一个。身份提供者 (Azure AD) 以 XML 文档格式创建身份验证响应,其中可能包含用户的用户名、电子邮件地址(和其他特征如果设置),然后使用 X.509 证书对其进行签名。结果返回给服务提供商 (AWS Cognito) — 这是 SAML 的身份验证响应。

  • 认证响应由服务提供商使用证书指纹检索和验证,该服务提供商已经知道身份提供商并拥有证书指纹。使用 URL 中的访问令牌,确认用户身份,并授予用户应用访问权限。

现在您已了解 AWS Cognito 和 Azure AD 的含义以及它们如何协同工作,让我们开始使用这些工具实施 SSO。我已将以下部分分解为不同的步骤,以帮助您更好地理解该过程。

第 1 步:在 AWS 上创建 Cognito 用户池

创建一个 AWS 账户以开始。创建后,转到AWS 管理控制台,导航到 ** “All Services”** 部分,然后单击 Security、Identity 和 Compliance 部分中的 Cognito。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--NXSVN8da--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/2800/0%2ATP_n1y8hu3YxIj9S)

在 Cognito 页面上,点击 “Manage User Pools” -> “Create a user pool” -> 添加所需信息,然后点击“Review defaults”

[](https://res.cloudinary.com/practicaldev/image/fetch/s--jXg_z88E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/2800/0%2ARJY-gaBmvlAgdCyN)

在 Review 页面上,您可以选择更新现有属性。在我们的例子中,我们将更新电子邮件属性,因此请单击屏幕右上角的编辑图标。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--F1h8KPLk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2AdkjSXmbWdiT7-eE1)

然后选择“电子邮件地址或电话号码”作为用户登录选项,从子类别中选择“启用电子邮件地址”,然后单击下一步

[](https://res.cloudinary.com/practicaldev/image/fetch/s--vG9d1xqo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2ATBDP2sOsMNyKqr1L)

最后,点击“**Create Pool”**按钮,完成池创建过程。通过这样做,池现在应该可以使用了。记下您的池 ID(例如 us-east-1 XX123xxXX),因为我们稍后在设置 Azure AD 门户和移动应用程序设置时需要使用它。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--Ty2VlaDB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2A2u1zERqZNNgRxmXJ)

接下来我们要做的是为我们的用户池设置域名。为此,请点击 “App integration” -> “Domain name” -> 填写域前缀 -> “Save Changes”

[](https://res.cloudinary.com/practicaldev/image/fetch/s--w74oWeIN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/2800/0%2AClsLMkMaoqu0FUOw)

单击“Save Changes” 按钮后,AWS 将为您生成一个域。在我的例子中,它是100040 https://example-setup-app.auth.us-east-1.amazoncognito.com 100041 100039,这个域将连接到我们之前创建的用户池。

第 2 步:创建 AWS 应用程序客户端并将其包含在用户池中

接下来我们要做的是使用 Cognito Service 创建一个应用程序。首先,转到您的**“用户池”** -> “常规设置” -> “应用程序客户端” -> “添加新的应用程序客户端”。然后为您的应用客户端添加一个名称,选择**“生成客户端密码”并单击“创建应用客户端”**按钮。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--hOCPG1YH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2AKz1xnuhvLLS-FdGF)

现在,让我们点击 “App integration” -> “App Client Settings” -> “Select your mobile client app” -> configure the settings *_ 来安装 App Client **按照下图中的格式 -> “_Save changes*”。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--bktq4kSe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2ADT5pq0aPWvPj4rzd)

步骤 3:创建 Azure AD 企业应用程序并将其连接到 Cognito 用户池

为此,请转到Azure 门户,单击**“所有服务”*并搜索 *“Azure Active Directory (Azure AD)”**。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--2NMFZRwG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2AXD8sB4pbxnyCJqts)

在 Azure AD 页面上,单击 “企业应用程序” -> “新应用程序” -> “非图库应用程序” -> 输入您的应用程序名称并单击添加按钮。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--rRAh3H9o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2ADl4BeCpWvPel1Ok)

现在您的应用程序已经开发完成,是时候将其链接到 AWS 用户池了。在您的 Azure AD 业务应用程序中,从 **“Single sign-on”** 下的下拉列表中选择**“SAML-based Sign-on”**。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--anvfFET5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/2800/0%2ALdcpSYcLchLGQ5Pw)

在 SAML 页面上,在 Domain and URLs 部分添加所需的详细信息,保存并下载 SAML 文件。对于上下文:

  • Identifier 具有您的用户池 ID(来自 AWS),它使用以下模式构建:urn:amazon:cognito:sp:us-east-1 XX123xxXXX

  • 身份验证令牌应由应用程序通过回复 URL 发送。在 SAML 中,这也称为断言消费者服务 (ACS)。它遵循以下模式:*https://example-setup-app.auth.us-east-1.amazoncognito.com/saml2/idpresponse*

[](https://res.cloudinary.com/practicaldev/image/fetch/s--6DhJ3QVB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2AiFUa8Rbif-GHHYEN)

我们要做的下一件事是添加**“用户”。邀请新用户或从现有用户列表中分配用户。这将允许用户使用此 Azure AD 帐户访问您的应用程序。为此,请转到“企业应用程序”** -> “用户和组” -> “添加用户”

完成添加用户后,单击“分配” 以保存更改。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--R4tzKGXr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2AdX-bunRCCwlkZqOZ)

第 4 步:在您的 AWS 用户池中设置身份提供商

到目前为止,您现在拥有了一个 XML 格式的 SAML 文件和一个用于登录的用户。让我们继续在您的 AWS 用户池 中设置身份提供商。

使用用户池时,应用用户可以与另一个身份提供者联合登录。为此,请单击导航栏上的“联合” -> “身份提供者” -> “ SAML”

[](https://res.cloudinary.com/practicaldev/image/fetch/s--sgCvftol--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2AkQraDG4DJk0qkblu)

为您的提供商命名并上传您从 Azure AD 下载的 SAML 文件,然后单击 Create Provider 按钮。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--GCqrFRUL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/2800/0%2AWrJamq7oaUAqveEG)

在您的提供商和 AWS 属性之间创建映射。在我们的例子中,我们只对电子邮件感兴趣,所以在 *SAML 属性字段 中添加这个*http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress*.*

[](https://res.cloudinary.com/practicaldev/image/fetch/s--KGwNHKFp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1. medium.com/max/2800/0%2Aees4d8BbEoWYpWeU)

现在,让我们给我们的应用客户端一个身份提供者。为此,请转到导航栏上的 App Integration -> App Client Settings -> 选择您的应用程序,然后单击 Enabled Identity Providers 复选框。保存您的更改。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--8Ku671gB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2A9qu_MIuRWdHtb_a5)

这就是您需要在 AWS 管理控制台和 Azure 站点中完成的一切。您现在可以对您的设置进行测试。

第 5 步:测试您的设置

在 Azure 门户中,转到应用程序的单点登录区域,然后单击测试 SAML 设置按钮。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--YUuHI6h1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2AhH2TR5Tzptx2wpeA)

之后,您必须安装 My Apps Secure Sign-in Extension 并使用您在第 3 步中添加到此应用程序的帐户登录:

[](https://res.cloudinary.com/practicaldev/image/fetch/s--wBOlY2I1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2A_il8veo7JJk7sshH)

如果登录成功,您将能够查看 SAML 请求和响应以及令牌:

[](https://res.cloudinary.com/practicaldev/image/fetch/s--r8BuU_xd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1。 medium.com/max/2800/0%2A7ENcuA88fSMDxINC)

您现在应该拥有开始在 Web 或移动应用程序中使用您的 Azure AD 帐户设置 SSO 身份验证的所有基本数据。

结论

为了使您的用户能够使用他们的公司 ID 登录到 Web 或移动应用程序,您在这篇博客文章中了解了 SSO 流程以及如何将 Amazon Cognito 用户池与 Azure AD 结合起来作为外部 SAML 身份提供商。

如果您有任何疑问,可以在评论部分留下。

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐