5

我正在使用 Cognito 托管 UI 解决方案构建企业应用程序并联合登录,人们可以使用任何电子邮件单独注册,但他们也可能为与我们签署了企业协议并使用 SSO 的公司工作。

所需的工作流程是他们输入他们的登录电子邮件,然后对照我们的 SAML 单点登录提供商列表进行检查,如果他们与使用 SSO 的企业客户匹配,他们将被发送到适当的联合页面;如果它们不匹配,它们将被带到通用登录。

到目前为止,我已成功使用 Hosted UI 和关键idpIdentifier参数成功创建了所需的行为。以下 React 代码总结了它的工作原理:

    hostedUILogin() {
        const idpIdentifier = this.state.email.split("@")[1];

        let url = `https://${domain}/oauth2/authorize?response_type=code&client_id=${clientId}&redirect_uri=${redirectSignIn}`;

        if (idpIdentifier) {
            url += `&idp_identifier=${idpIdentifier}`;
        }

        window.location.assign(url);

    }

这会产生预期的效果。当有人使用以“@corporatecustomer.com”结尾的电子邮件地址登录时,他们将被带到公司联盟的 SSO 页面。当有人使用“@gmail.com”登录时,他们会被带到 Cognito 托管 UI。

不幸的是,托管 UI 似乎无法帮助自己,只能在左侧展示我们的客户列表。

截屏

我无法在文档或教程中发现使用 Cognito 托管 UI 的任何方式,而无需在左侧宣传所有可用的 SAML 提供程序,从而泄露我们的客户列表。

我已尝试在 App Client 配置中删除此 Hosted UI App 的 IDP,但随后它不再通过 idp_identifier 成功捕获。

4

2 回答 2

0

您可以创建不同的 App Client,并且您只能在第一个上启用身份提供者,在另一个上启用本机用户名/密码。

对于每个应用程序客户端,您可以在客户端动态更改您的 AWS Config。

在我们的用例中,SSO 用户在他们的电子邮件域上可能没有相同的身份提供者名称,因此我们有“使用 SSO 登录”按钮,它首先通过向后端发送用户电子邮件的请求来处理“家庭领域发现”,然后端点返回属于该用户的身份提供者名称。然后客户端启动联合登录(或使用身份提供者参数直接调用托管 UI)。

于 2021-12-11T21:21:29.007 回答
0

如果对您有帮助,我发现的解决方案之一是为每个企业客户创建一个用户池

于 2020-06-02T15:49:12.200 回答