AWS Cognito 的 SMS 多因素身份验证返回无效代码或身份验证状态

2024-01-05

我正在尝试实现基于以下内容的身份验证Cognito使用他们的GoSDK。我已经能够获得基本的username/password身份验证可以工作,但是当我使用添加两因素身份验证时SMS我被卡住了。

重现步骤 :

  1. 我使用用户名/密码和电子邮件验证创建用户
  2. 我验证电子邮件地址
  3. 我设置了电话号码并请求验证码
  4. 我验证电话号码
  5. 我启用了两步验证(通过短信)
  6. 我尝试登录并接收 SMS_MFA 质询
  7. 我在手机上收到代码并致电 AdminRespondToAuthChallenge

问题,我收到一个error :

CodeMismatchException: Invalid code or auth state for the user.
status code: 400, request id: 1513894e-8efa-11e8-a8f8-97e5e083c03b

短信验证码肯定是正确的,看来肯定和auth状态有关。

对 Cognito 的调用如下所示:

c.cip.SignUp(&cognitoidentityprovider.SignUpInput{
        ClientId: aws.String(c.clientID),
        Username: aws.String(username),
        Password: aws.String(password),
        UserAttributes: []*cognitoidentityprovider.AttributeType{
            {
                Name:  aws.String("email"),
                Value: aws.String(email),
            },
            {
                Name:  aws.String("name"),
                Value: aws.String(fullName),
            },
        },
    })

c.cip.ConfirmSignUp(&cognitoidentityprovider.ConfirmSignUpInput{
    ClientId:         aws.String(c.clientID),
    Username:         aws.String(username),
    ConfirmationCode: aws.String(code),
})


//Add the phone number
c.cip.AdminUpdateUserAttributes(&cognitoidentityprovider.AdminUpdateUserAttributesInput{
            UserPoolId: aws.String(c.userPoolID),
            Username:   aws.String(username),
            UserAttributes: []*cognitoidentityprovider.AttributeType{
                {
                    Name:  aws.String("phone_number"),
                    Value: aws.String(phoneNumber),
                },
            },
        })

//Request a verification code
c.cip.GetUserAttributeVerificationCode(&cognitoidentityprovider.GetUserAttributeVerificationCodeInput{
    AccessToken:   aws.String(accessToken),
    AttributeName: aws.String("phone_number"),
})

//Verify the phone number
c.cip.VerifyUserAttribute(&cognitoidentityprovider.VerifyUserAttributeInput{
    AccessToken:   aws.String(accessToken),
    AttributeName: aws.String("phone_number"),
    Code:          aws.String(code),
})

//Enable SMS 2-factor auth c.cip.AdminSetUserSettings(&cognitoidentityprovider.AdminSetUserSettingsInput{
    UserPoolId: aws.String(c.userPoolID),
    Username:   aws.String(username),
    MFAOptions: []*cognitoidentityprovider.MFAOptionType{
        &cognitoidentityprovider.MFAOptionType{
            AttributeName:  aws.String("phone_number"),
            DeliveryMedium: aws.String("SMS"),
        },
    },
})

c.cip.AdminInitiateAuth(&cognitoidentityprovider.AdminInitiateAuthInput{
    ClientId:   aws.String(c.clientID),
    UserPoolId: aws.String(c.userPoolID),
    AuthFlow:   aws.String("ADMIN_NO_SRP_AUTH"),
    AuthParameters: map[string]*string{
        "USERNAME": aws.String(username),
        "PASSWORD": aws.String(password),
    },
})

c.cip.AdminRespondToAuthChallenge(&cognitoidentityprovider.AdminRespondToAuthChallengeInput{
        ClientId:      aws.String(c.clientID),
        UserPoolId:    aws.String(c.userPoolID),
        ChallengeName: aws.String("SMS_MFA"),
        Session:       aws.String(session),
        ChallengeResponses: map[string]*string{
            "USERNAME":     aws.String(username),
            "SMS_MFA_CODE": aws.String(code),
        },
    })

执行 GetUser 调用会显示用户的当前状态:

User = {
              Enabled: true,
              MFAOptions: [{
                  AttributeName: "phone_number",
                  DeliveryMedium: "SMS"
                }],
              PreferredMfaSetting: "SMS_MFA",
              UserAttributes: [
                {
                  Name: "sub",
                  Value: "bd2bb8bc-dfe6-4216-829c-5ae975ce24e5"
                },
                {
                  Name: "email_verified",
                  Value: "true"
                },
                {
                  Name: "name",
                  Value: "Ben Vogan"
                },
                {
                  Name: "phone_number_verified",
                  Value: "true"
                },
                {
                  Name: "phone_number",
                  Value: "<redacted>"
                },
                {
                  Name: "email",
                  Value: "<redacted>"
                }
              ],
              UserCreateDate: 2018-07-24 03:29:49 +0000 UTC,
              UserLastModifiedDate: 2018-07-24 04:19:51 +0000 UTC,
              UserMFASettingList: ["SMS_MFA"],
              UserStatus: "CONFIRMED",
              Username: "bd2bb8bc-dfe6-4216-829c-5ae975ce24e5"
            }

我不知道是否有办法查询用户的身份验证状态,以便我可以验证这一点。

AWS 文档和无用的错误让我发疯,所以任何帮助将不胜感激!

Thanks.


你的问题似乎模棱两可。

第2步你是

  1. 我设置了电话号码并请求验证码
  2. 我验证电话号码

这只不过是 Cognito 中的 MFA。如果您已正确配置池。

您不能同时拥有用于登录的电话和 MFA。这没有道理。

但如果您有手机用于登录,那么 Cognito 每次都会发送带有代码的短信。密码仅用于电子邮件登录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS Cognito 的 SMS 多因素身份验证返回无效代码或身份验证状态 的相关文章

  • 限制 FormFile 中的文件大小

    我让用户使用 FormFile 上传文件 我应该在什么时候检查文件大小是否太大 当我做 file header fileErr r FormFile file 文件对象已经创建 那么我是否已经产生了读取整个文件的成本 https golan
  • 无法将字符串解组为 int64 类型的 Go 值

    我有结构 type tySurvey struct Id int64 json id omitempty Name string json name omitempty I do json Marshal在 HTML 页面中写入 JSON
  • 如何获取文件的 ctime、atime、mtime 并更改它们

    如何使用 Go 获取文件的 ctime mtime atime 并更改它们 在 Go 1 1 2 中 os Stat只能获取mtime os Chtimes 可以更改 mtime 和 atime 但不能更改 ctime Linux ctim
  • 无法封送,(实现encoding.BinaryMarshaler)。具有多个对象的 go-redis Sdd

    我有下面一段代码 我试图将一个数组添加到 redis 集中 但它给了我一个错误 package main import encoding json fmt github com go redis redis type Info struct
  • golang sql 驱动程序的准备语句

    关于golang的sql driver 下面两条语句有什么区别 store DB is sql DB type rows err store DB Query SQL args err nil defer rows Close and st
  • Bash脚本无法执行Go命令

    我正在尝试编写一个 bash 脚本来自动在不同的目录中运行 go get install 相关部分在这里 cd web go get cd web go install cd services go get cd services go i
  • 如何自定义解析错误的 HTTP 400 响应?

    我编写了一个 REST API 服务 要求所有响应均为 JSON 但是 当 Go HTTP 请求解析器遇到错误时 它会返回 400 作为纯文本响应 而不会调用我的处理程序 例子 gt curl i H Authorization Basic
  • Go API 在 html 中显示 swagger api 规范 (json) (Swagger UI)

    我有一个服务于特定端口的应用程序 gorilla mux 我也有一个 json 文件形式的 swagger API 规范 是否有任何 go API 可以像 spring boot 一样从 JSON 文件生成 swagger UI 定义 我正
  • Golang Appengine 项目无法构建

    我有一个使用 golang 的应用程序引擎项目 我已经大约一年没有碰过了 我现在无法让它在之前构建的机器上构建 我收到以下错误 go app builder 解析输入失败 解析器 src golang org x net internal
  • Go SQL查询不一致

    我在执行查询时遇到一些非常奇怪的不一致 并且想知道是否有人知道原因 想象一下我有一个定义如下的结构 type Result struct Afield string db A Bfield interface db B Cfield str
  • 视频第一帧

    我正在创建一个单页应用程序 后端使用 Golang 前端使用 javascript 我想找到一种使用 Golang 获取视频第一帧的方法 首先 我将 mp4 视频文件上传到服务器 它保存在服务器上 有没有办法使用 Golang 获取该视频的
  • 投射回更专业的界面

    我正在用 Go 编写一个游戏 在 C 中 我将所有实体类存储在 BaseEntity 类的数组中 如果一个实体需要在世界中移动 那么它将是一个从 BaseEntity 派生的 PhysEntity 但添加了方法 我尝试模仿这是 go pac
  • Gorm 总是返回带有 nil 值的结构

    我正在使用 Gorm 构建 Go Web API 作为 Amazon RDS 中 Postgresql 数据库的 ORM 问题是 Gorm 总是返回一片结构 其值全部为零 尽管数据库已经填充了数据 切片中的结构体数量是否合适取决于LIMIT
  • 如何从非英语字符串解析go中的月份

    我想将以下字符串解析为 go 中的日期 This item will be released on March 9 2014 我跟着this https stackoverflow com questions 14106541 go par
  • 为什么 Go 中只有 int 而没有 float?

    在 Go 中 有这样的类型int这可能相当于int32 or int64取决于系统架构 我可以声明一个整数变量而不用担心它的大小 var x int 为什么没有这个类型float 这相当于float32 or float64取决于我的系统架
  • 如何在邮递员中集成亚马逊认知登录?

    我使用 Amazon Cognito 用户池进行登录 当我访问我的网络应用程序时 我得到一个重定向到 https
  • 如何在 Ubuntu 中将 Go 程序作为守护进程启动?

    在 Ubuntu 中将 Go 程序作为守护进程启动的正确方法是什么 然后我将使用 Monit 对其进行监控 我应该做这样的事情 go run myapp go 我应该考虑 Go 特有的事情吗 您应该为您的程序构建一个可执行文件 go bui
  • 递归追加到切片不起作用

    我正在尝试学习 Go 但我不明白为什么递归调用堆栈末尾的这段代码返回一个空切片 有帮助吗 还tmp甚至似乎没有在调试器中注册 func main input 3 int 4 6 7 expected 6 7 4 6 7 4 6 4 7 fm
  • 在 Go/ 中创建/更新 google 驱动器权限/ [使用 api 创建电子表格但无法访问它]

    我正在尝试使用 google Drive api 和以下代码创建电子表格 但我无法访问它 update 该文件似乎不在我在这里指定的驱动器中 有人知道为什么会发生这种情况吗 update 在字段中添加了父母 但有 404 错误 说找不到文件
  • AWS-amplify 在请求中包含 cognito Authorization 标头

    我创建了一个 AWS 移动中心项目 包括 Cognito 和云逻辑 在我的 API 网关中 我为授权者设置了 Cognito 用户池 我使用 React Native 作为我的客户端应用程序 如何将授权标头添加到我的 API 请求中 con

随机推荐

  • 如何将指向引用的指针作为参数传递给函数 - Objective C

    在 C 中 我们将把指针传递给函数 bool getData REMOTE ID msId RsEvent pEvent 如何在 Objective C 中声明这个 BOOL getData REMOTE ID msId withEvent
  • ServiceBase.Run(ServiceBase[]) 方法是否异步运行数组中的所有服务?

    ServiceBase servicesToRun servicesToRun new ServiceBase new Service1 new Service2 ServiceBase Run servicesToRun 这将如何运作 S
  • Python:在元组上使用 lower 函数

    我是 Python 新手 并且查看了相当多的文档来弄清楚发生了什么 但没有任何运气 我有一个元组列表 需要将其转换为小写并对列表中的所有值执行数学运算 E 需要变成 e 才能执行数学运算 如果给定的元组列表中有单个值 则以下工作有效 Ear
  • 如何在 dotnet core 中使用实体框架获取数据

    I have a table called UserAnswers below screenshot contains table data 我想按 SurveyId 获取数据并按 CreatedBy 列进行分组 举个例子 有一个用户叫 电
  • Flutter - 当我推送的页面被后退按钮弹出时如何收到通知?

    假设这种情况 page1Navigator push到第2页 page2 上的用户单击后退按钮 因此 page2 弹出并且 page1 重新获得视图 如何在 page1 上捕获此事件 您可以通过从 Navigator pop 传递参数来进行
  • 为什么编译器不将这两种类型转换优化为一种呢?

    我正在查看具有以下模式的函数 if obj is SpecificClass1 SpecificClass1 obj SomeMethod1 else if obj is SpecificClass2 SpecificClass2 obj
  • $(window).resize(): 之前

    是否可以每次获取浏览器的宽度 高度BEFOREresize 被触发了吗 window resize function 这是因为我正在计算浏览器调整大小 之前 之后的差异 你必须存储以前的值 有点像这样 var prevHeight 0 va
  • 如何将字符串转换为字符序列?

    如何转换String to CharSequence在Java中 Since String IS A CharSequence 你可以通过String无论您何时需要CharSequence 或分配一个String to a CharSequ
  • Java Applet 中的缓存

    有哪些方法可用于在 Java 小程序中进行缓存 据我所知 组成小程序的 jar 会被大多数浏览器缓存 小程序使用的任何依赖 jar 都会出现这种情况吗 如果小程序在运行时从远程 URL 加载资源 是吗 假设这不会被浏览器缓存是否正确 如果它
  • Python - 创建一个以给定值开始并以给定长度结束的列表

    如何创建一个具有起始值和列表长度的列表 例如 如果我想创建一个从 17 开始 长度为 5 的列表 num list 17 18 19 20 21 我已尝试以下操作 但它没有产生正确的结果 def answer start length id
  • NetLogo:以紧凑的方式对列表中的一项执行操作的过程?

    NetLogo 的新手 想知道是否有一个过程可以以紧凑的方式对列表中的一项执行操作 类似于地图 但针对一项 例如 假设我想添加3到索引处的项目i在列表中blah 现在我正在这样做 set blah replace item i blah i
  • sqlite3:未找到

    我正在尝试使用此处描述的过程访问我的设备上的 sqlite 数据库 我如何查看 SQLite 数据库 无模拟器 https stackoverflow com questions 7632767 how can i see sqlite d
  • Draw.io:如何调试未压缩的 js 代码?

    我从github存储库下载了draw io源文件 并尝试对导入函数进行一些细微的更改 但所有源都被缩小了 尤其是app min js 所以我的问题是 有什么方法可以使用未缩小的源代码来调试代码吗 我还尝试在查询字符串中传递参数 dev 1
  • Django:尝试编写只读数据库

    我刚刚创建了一个 Django 项目 python manage py startapp smartrecruitment 然后我运行了数据库同步 python manage py syncdb Operations to perform
  • 在Javascript中将字符串转换为日期时间格式

    我有一个字符串 我想与 JavaScript 日期时间对象进行比较 如何使用 JavaScript 将字符串 1 1 1912 转换为日期时间 以便我可以进行比较 if EDateTime gt 1 1 1912 如果您可以保证日期格式 您
  • 如何清除 html 5 客户端存储?

    例如 我认为 StackOverflow 通过 html 5 客户端存储来记住用户 我怎样才能清除这个存储 清除缓存好像不行 删除 flash cookie 似乎也没有帮助 附注我正在使用 Safari 但我也对一般内容感兴趣 StackO
  • 通过管道传输的 Thrift IPC (Windows)

    我一直在关注 Thrift 对 Windows 的支持 并且由于许多贡献者的努力 VS 开发已经取得了长足的进步 有针对编译器和 C 库的 VS 2010 项目 我已经确认它们在 0 8 中运行良好 http thrift apache o
  • Opencv 和 AWS Lambda

    我正在用 Java 编写一个 lambda 函数 想要使用 opencv 库 我很难理解如何设置它 请帮忙 我可以在本地很好地设置它 但我对 lambda 部分真的很困惑 编辑 准确地说 我在使用 System LoadLibrary 函数
  • 将使用-v7.3(HDF5)保存的Matlab稀疏矩阵加载到Python中并对其进行操作

    我是 python 新手 来自 matlab 我有一个以 matlab v7 3 HDF5 格式保存的大型稀疏矩阵 到目前为止 我发现了两种加载文件的方法 使用h5py and tables 然而 在这两种方法之后 在矩阵上的操作似乎都非常
  • AWS Cognito 的 SMS 多因素身份验证返回无效代码或身份验证状态

    我正在尝试实现基于以下内容的身份验证Cognito使用他们的GoSDK 我已经能够获得基本的username password身份验证可以工作 但是当我使用添加两因素身份验证时SMS我被卡住了 重现步骤 我使用用户名 密码和电子邮件验证创建