使用AWS Cognito和AD FS作为Web应用程序的身份验证

问题描述 投票:5回答:1

我们目前正在AWS上使用完整的无服务器堆栈构建Web应用程序。到目前为止,我们使用AWS Lambda,AWS DynamoDB和Cognito用户池非常成功。此应用程序旨在成为企业应用程序,我的一个客户希望能够使用其当前的Active Directory凭据记录所有用户。我过去曾在其他应用程序中使用AD FS,但它总是被证明是一个让它运行起来的黑客攻击。

现在,我想向客户发送有关如何配置其AD FS信赖方信任以对我的应用程序进行身份验证的说明。

我已经读过,最好的方法是创建一个链接到Cognito用户池的Cognito Identity Provider。在用户池中,您应该创建SAML提供程序并从AD FS服务器上载metadata.xml。

我已经设置了一个带有AD FS的实验室服务器,我可以使用它。现在我不确定在依赖方信任设置或Cognito设置方面我做错了什么。我已经在这里工作了很长时间,并阅读了我能找到的每篇博客文章。如果有人可以帮助我或指出我正确的方向,将不胜感激。

node.js amazon-web-services adfs aws-cognito
1个回答
12
投票

在经历了很多挫折之后,我现在可以回答这个问题,所以我决定为这些挣扎的初学者提供一个简单的逐步解答。

我只进入身份验证设置而不是授权。授权需要IAM角色和一些特定于体系结构的其他逻辑。我很高兴在别处讨论。

这种设置有2个组件:

  1. 具有联合身份提供程序的AWS Cognito用户池
  2. 安装了AD FS的Windows Server

Creating the Cognito User Pool domain

在“常规设置”下的“Cognito用户池”中,选择“应用程序客户端”,如果没有,则添加一个(稍后您将需要该ID)。

然后转到App Integration下的Domain Name并选择一个有效的域前缀并保存。

Relying Party Trust in Windows AD FS

您需要让公司建立信赖方信任。所需步骤如下:

  1. 打开AD FS管理控制台
  2. 创建新的依赖方信任
  3. 选择手动输入详细信息
  4. 输入可轻松识别为您的应用程序的信任的名称
  5. 选择使用ADFS 2.0
  6. 在此示例中,不需要证书,因此只需单击下一步
  7. 选中该复选框以启用SAML 2.0协议并以此格式输入URL:https://<domain_prefix>.auth.<region>.amazoncognito.com/saml2/idpresponse(在上一步中设置域前缀)
  8. 依赖方信任标识符必须是urn:amazon:cognito:sp:<pool-id>,其中pool-id是在用户池的常规设置中找到的AWS Cognito用户池ID
  9. 允许所有用户进行身份验证(假设这是您的意图)

现在,您需要向依赖方信任添加声明。

  1. 右键单击信赖方信任,然后单击编辑声明
  2. 创建一个发送LDAP属性的新声明
  3. 给它一个名字(我通常使用Profile但这取决于你)
  4. 使属性存储Active Directory
  5. 根据需要填写表格。要求是您返回了名称ID(我通常使用User-Principal-Name映射到Name ID)。表格的其余部分是您所需要的。例如,Given-Name可以映射到FName

Federated Identities in AWS Cognito User pool

因此,作为应用程序开发人员,您需要设置Cognito用户池。完成向导并选择您喜欢的设置。无论如何,联合身份不一定遵循与用户池本身相同的规则。

设置联合身份的步骤如下:

  1. 在Cognito用户池中,选择“联盟”下的“身份提供商”
  2. 点击SAML
  3. 提供元数据文档端点(通常以https://<fqdn>/FederationMetadata/2007-06/FederationMetadata.xml的形式)。如果您无法下载该文件并通过单击“选择文件”上传该文件
  4. 输入对您有意义的提供者名称,但请确保不要在名称中添加任何空格
  5. 标识符是可选的(请参阅下面的使用标准)
  6. 检查启用IdP注销流程将在注销时签署用户的联合身份以及您的应用程序。
  7. 单击创建提供者

Attribute Mapping for Federated Identity

  1. 通过转到用户池中“联合”下的“属性映射”,为联合身份创建字段映射。
  2. 选择SAML
  3. 单击“添加SAML属性”
  4. 确保选中Capture,从上面输入SAML attrbites(例如FName)并选择它映射到的用户池属性。

Setting up the App Client

测试之前的最后一步是设置您之前创建的应用客户端。

  1. 转到App Integration下的App Client设置
  2. 输入相应应用客户端的设置
  3. 选择所有适当的身份提供者(特别是上面的一个设置)
  4. 您可以设置以逗号分隔的回调和注销URL列表。回调URL应指向将在身份验证后使用令牌的某个位置(请参阅下面的测试)。
  5. 根据需要选择OAuth 2.0属性,但测试选择除客户端凭据之外的所有内容

Testing

要进行测试,您可以尝试使用以下形式的几个不同的URL: -

  • https://<domain_prefix>.auth.<region>.amazoncognito.com/authorize?idp_identifier=<idp_identifier>&response_type=token&client_id=<app_client_id>&redirect_uri=<app_client_callback_URL>直接进入授权端点
  • https://<domain_prefix>.auth.<region>.amazoncognito.com/login?response_type=token&client_id=<app_client_id>&redirect_uri=<app_client_callback_URL>转到AWS托管登录UI

idp_identifier是创建联合身份时定义的可选字段。这在URL中也不是必需的。

This一页webapp是一个很好的工具,用于测试事情是否正常,你得到了所需的响应。

我希望这有助于其他人。

© www.soinside.com 2019 - 2024. All rights reserved.