如何禁用通过身份提供商创建的 AWS Cognito 用户池帐户?
How to disable AWS Cognito User Pool account created via Identity Provider?
那里有 Cognito 用户池专家吗?我已经使用 Cognito 一段时间了,但这个让我有点难过。
我们允许用户使用 Facebook 等社交帐户进行注册和登录,这些帐户在用户池中设置为身份提供者。
用户需要先填写自定义注册表,然后才能使用主应用程序 - 我们不使用托管 UI 进行登录或注册
自定义注册过程的一个步骤允许用户指明随后要使用哪个社交提供者
这使我们能够从社交服务提供商那里撤回用户的电子邮件、名字和姓氏,这很棒 - 我们目前使用 Cognito 客户端和回调来执行此操作
但是在这样做的过程中,这会在注册过程完成之前在用户池中提供一个用户——实际上这是有道理的——以便 Cognito 向我们提供它需要调用的用户信息进入社交提供商 /userinfo 端点以填充用户数据
所以,我们现在遇到的问题是,当用户在注册过程中进行到一半时,我有一个已确认的用户帐户 - 例如。在用户完成注册过程之前
这是一个问题,因为用户可以使用他们的社交登录名登录应用程序,而无需完成注册过程
据我所知,我有两个选择:
- PostConfirmation Lambda 触发器,它使用 cognito-idp SDK 在确认后立即禁用用户
- 不要使用 Cognito 获取用户信息,如名字、姓氏、电子邮件、图片等 - 但是这需要我们为每个当前和未来的社交提供商编写解决方案,这不是我所热衷的在
我是不是遗漏了什么明显的东西?
提前致谢!
我会说 PostConfirmation Lambda 触发器是一个很好的方法 - 但是,请改用 adminDisableProviderForUser 来禁止用户使用指定的外部(SAML 或社交)身份提供商登录
您稍后可以调用 adminLinkProviderForUser 将用户池中的现有用户帐户 link 提供给外部身份提供者。
另一种解决方案是防止用户在未完全完成注册过程时通过预身份验证 Lambda 触发器检查与您已完成的注册过程相关的唯一标识符来登录
最终对我们来说最简单的解决方案是在 Cognito 中使用 预令牌生成触发器,如下所示:
exports.handler = async (event) => {
if(event.triggerSource==="TokenGeneration_HostedAuth") {
//check db/api etc to see if we have a valid registration stored for user
if(!hasCompletedRegistration) {
//throw auth exception which we can catch on the frontend to inform user
throw new Error("REGISTRATION_NOT_COMPLETE")
}
}
return event
};
对于 username/password 登录,TriggerSource 将为 TokenGeneration_Authentication
对于 federated/social 登录,TriggerSource 将为 TokenGeneration_HostedAuth
那里有 Cognito 用户池专家吗?我已经使用 Cognito 一段时间了,但这个让我有点难过。
我们允许用户使用 Facebook 等社交帐户进行注册和登录,这些帐户在用户池中设置为身份提供者。
用户需要先填写自定义注册表,然后才能使用主应用程序 - 我们不使用托管 UI 进行登录或注册
自定义注册过程的一个步骤允许用户指明随后要使用哪个社交提供者
这使我们能够从社交服务提供商那里撤回用户的电子邮件、名字和姓氏,这很棒 - 我们目前使用 Cognito 客户端和回调来执行此操作
但是在这样做的过程中,这会在注册过程完成之前在用户池中提供一个用户——实际上这是有道理的——以便 Cognito 向我们提供它需要调用的用户信息进入社交提供商 /userinfo 端点以填充用户数据
所以,我们现在遇到的问题是,当用户在注册过程中进行到一半时,我有一个已确认的用户帐户 - 例如。在用户完成注册过程之前
这是一个问题,因为用户可以使用他们的社交登录名登录应用程序,而无需完成注册过程
据我所知,我有两个选择:
- PostConfirmation Lambda 触发器,它使用 cognito-idp SDK 在确认后立即禁用用户
- 不要使用 Cognito 获取用户信息,如名字、姓氏、电子邮件、图片等 - 但是这需要我们为每个当前和未来的社交提供商编写解决方案,这不是我所热衷的在
我是不是遗漏了什么明显的东西?
提前致谢!
我会说 PostConfirmation Lambda 触发器是一个很好的方法 - 但是,请改用 adminDisableProviderForUser 来禁止用户使用指定的外部(SAML 或社交)身份提供商登录
您稍后可以调用 adminLinkProviderForUser 将用户池中的现有用户帐户 link 提供给外部身份提供者。
另一种解决方案是防止用户在未完全完成注册过程时通过预身份验证 Lambda 触发器检查与您已完成的注册过程相关的唯一标识符来登录
最终对我们来说最简单的解决方案是在 Cognito 中使用 预令牌生成触发器,如下所示:
exports.handler = async (event) => {
if(event.triggerSource==="TokenGeneration_HostedAuth") {
//check db/api etc to see if we have a valid registration stored for user
if(!hasCompletedRegistration) {
//throw auth exception which we can catch on the frontend to inform user
throw new Error("REGISTRATION_NOT_COMPLETE")
}
}
return event
};
对于 username/password 登录,TriggerSource 将为 TokenGeneration_Authentication
对于 federated/social 登录,TriggerSource 将为 TokenGeneration_HostedAuth