繁体   English   中英

如何禁用通过身份提供商创建的 AWS Cognito 用户池帐户?

[英]How to disable AWS Cognito User Pool account created via Identity Provider?

那里有 Cognito 用户池专家吗? 我已经使用 Cognito 一段时间了,但这个让我有点难过。

  • 我们允许用户使用社交帐户注册和登录,例如 Facebook,这些帐户在用户池中设置为身份提供者。

  • 用户需要先填写自定义注册表,然后才能使用主应用程序——我们不使用托管 UI 进行登录或注册

  • 自定义注册过程的一个步骤允许用户指明随后想要使用哪个社交提供者

  • 这使我们能够从社交提供者那里拉回用户 email、名字和姓氏,这很棒——我们目前使用认知客户端和回调来执行此操作

  • 但是在这样做的过程中,这会在注册过程完成之前在用户池中提供一个用户——实际上这是有道理的——以便 Cognito 向我们提供它需要调用社交提供程序 /userinfo 端点来填充的用户信息用户数据

  • 所以,我们现在遇到的问题是,当用户在注册过程中进行到一半时,我有一个已确认的用户帐户 - 例如。 在用户完成注册过程之前

  • 这是一个问题,因为用户可以使用他们的社交登录名登录应用程序,而无需完成注册过程

所以在我看来,我有两个选择:

  • PostConfirmation Lambda 触发器,它使用 cognito-idp SDK 在确认后立即禁用用户
  • 不要使用 Cognito 来获取用户信息,如名字、姓氏、email、图片等——但这需要我们为每个当前和未来的社交提供者编写一个解决方案,这不是我所热衷的

我错过了一些明显的东西吗?

提前致谢!

我会说 PostConfirmation Lambda 触发器是一个很好的方法 - 但是使用adminDisableProviderForUser来禁止用户使用指定的外部(SAML 或社交)身份提供者登录

adminDisableProviderForUser

您可以稍后调用adminLinkProviderForUser将用户池中的现有用户帐户链接到外部身份提供者。

adminLinkProviderForUser

另一种解决方案是防止用户在未通过预身份验证完全完成注册过程的情况下登录 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

};

对于用户名/密码登录,TriggerSource 将是TokenGeneration_Authentication

对于联合/社交登录,TriggerSource 将是TokenGeneration_HostedAuth

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM