You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

外部身份提供商创建的AWS Cognito账号登录报错“User does not exist”

问题分析

你遇到的核心问题是:通过Azure AD(SAML身份提供商)创建的External_provider状态Cognito用户,无法通过Amplify UI React的默认登录流程登录,报错“User does not exist”,但Cognito本地创建的用户可正常使用。

本质原因是外部身份提供商创建的用户没有Cognito本地凭证,不能通过常规的用户名密码登录流程验证,必须走对应的SAML第三方登录通道。

解决方案

1. 检查Amplify配置,确保SAML提供商已注册

在你的amplifyconfiguration.json或手动Auth配置中,必须显式添加SAML身份提供商信息:

"Auth": {
  "Cognito": {
    "userPoolId": "你的用户池ID",
    "userPoolClientId": "你的应用客户端ID",
    "identityPoolId": "你的身份池ID",
    "loginWith": {
      "oauth": {
        "domain": "你的Cognito域名",
        "scope": ["openid", "email", "profile"],
        "redirectSignIn": "http://localhost:3000/",
        "redirectSignOut": "http://localhost:3000/",
        "responseType": "code"
      },
      "saml": ["你的SAML提供商名称"] // 名称需与Cognito控制台中配置的完全一致
    }
  }
}

2. 配置Authenticator组件,启用SAML登录入口

默认的Authenticator组件仅显示用户名密码登录框,需显式指定SAML提供商,让组件渲染对应的第三方登录按钮:

import { Authenticator } from "@aws-amplify/ui-react";
import "@aws-amplify/ui-react/styles.css";

function App() {
  return (
    // 传入samlProviders属性,指定你的SAML提供商名称
    <Authenticator samlProviders={["你的SAML提供商名称"]}>
      {({ signOut, user }) => (
        <div>
          <p>欢迎,{user.username}</p>
          <button onClick={signOut}>退出登录</button>
        </div>
      )}
    </Authenticator>
  );
}

如果使用自定义登录UI,可通过useAuthenticator的signInWithRedirect方法触发SAML登录流程:

import { useAuthenticator } from "@aws-amplify/ui-react";

function AzureADLoginButton() {
  const { signInWithRedirect } = useAuthenticator();
  return (
    <button onClick={() => signInWithRedirect({ provider: "你的SAML提供商名称" })}>
      使用Azure AD登录
    </button>
  );
}

3. 验证Cognito控制台的配置

  • 启用应用客户端的SAML提供商:进入Cognito控制台→用户池→应用集成→应用客户端,找到你的应用客户端,确认“启用的身份提供商”列表中包含你的SAML提供商。
  • 检查SAML属性映射:在Cognito控制台→用户池→身份提供商→你的SAML提供商,确认属性映射正确(比如将Azure AD的email映射到Cognito的email属性),确保用户身份信息能正确同步。
  • 确认SAML元数据/端点配置:验证Azure AD导出的SAML元数据是否正确导入Cognito,或手动配置的SAML登录端点、证书是否有效。

关键注意事项

外部External_provider状态的用户不能通过常规用户名密码登录框登录,必须点击对应的SAML第三方登录按钮,通过重定向到Azure AD完成身份验证后,再回到应用。直接在本地登录框输入外部用户的邮箱/用户名,会因用户无本地凭证而触发“User does not exist”错误。

内容的提问来源于stack exchange,提问作者Rogelio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:36:16