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

时间:2018-05-13 12:10:19

标签: node.js amazon-web-services adfs aws-cognito

我们目前正在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设置方面我做错了什么。我已经在这里工作了很长时间,并阅读了我能找到的每篇博客文章。如果有人能帮助我或指出我正确的方向,将非常感激。

1 个答案:

答案 0 :(得分:10)

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

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

这种设置有两个组件:

  1. 具有联合身份提供商的AWS Cognito用户池
  2. 安装了AD FS的Windows Server
  3. 创建Cognito用户池域

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

    然后转到应用集成下的域名,并选择有效的域名前缀并保存。

    Windows AD FS中的信赖方信任

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

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

      1. 右键点击依赖方信任,然后点击修改声明
      2. 创建一个发送LDAP属性的新声明
      3. 给它起个名字(我通常使用个人资料但这取决于你)
      4. 使属性存储Active Directory
      5. 根据需要填写表格。要求是您返回了名称ID (我通常使用 User-Principal-Name 映射到名称ID )。表格的其余部分是您所需要的。例如, Given-Name 可以映射到 FName
      6. AWS Cognito用户池中的联合身份

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

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

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

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

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

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

              测试

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

              • 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托管登录界面

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

              This一页webapp是一个很好的工具,用于测试事情是否有效,并且您正在获得所需的响应。

              我希望这有助于其他人。

相关问题