问题标签 [totp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
412 浏览

python - TOTP:有人可以在 30 秒内使用相同的 otp 并滥用它吗

在我的 python 项目中,我打算使用 TOTP。

新用户输入他的电子邮件。然后他收到使用 TOTP 生成的 OTP。

OTP 有效期为 30 秒。

现在可以输入假电子邮件并使用相同的 OTP,有效期至 30 秒。

那么如何保护免受此类事情的影响。

在验证用户的电子邮件之前,我不想将第一次用户保存在数据库中

0 投票
0 回答
107 浏览

php - 使用 hash_hmac() 在 PHP 中实现 TOTP 的问题

我正在尝试在 PHP 中实现 TOTP,我得到了一个六位数的代码,但它与我的 Authenticator 应用程序中的代码不匹配。我能够将最有可能与 hash_hmac 的输出相关的问题归零,因为我测试了在 RFC 文档中的示例上生成哈希后发生的所有位移,并产生了预期的输出。我现在的问题是:我做错了什么?我是否将错误格式的输入传递给 hash_hmac?我在这里真的很茫然。

TOTP::get() 的一些示例输入和输出,其中 $this->secret 始终为“secret”且数字始终为 6:

0 投票
0 回答
1625 浏览

spring - 如何在 Spring Security 中正确实现 TOTP (2FA)?

我正在为自己编写一个小型应用程序,并希望在 Spring Boot 中实现 2 因素身份验证。为此,请遵循本文的提示:https ://www.baeldung.com/spring-security-two-factor-authentication-with-soft-token

面临以下问题: 1)我根据这篇文章编写的代码不起作用。Spring Security 完全忽略 is2FaEnabled == true 并在任何情况下授权用户,即使尚未输入代码。

从这个线程中的日志来看,.authenticationDetailsS​​ource (authenticationDetailsS​​ource) 甚至没有进行验证。

2)如何实现:在授权过程中,首先检查是否启用了2FA,如果是,然后将用户引导到另一个URL或打开一个带有输入的模块,正确输入代码后,授权它?

这是我的源代码:

CustomWebAuthenticationDetailsS​​ource.java

CustomWebAuthenticationDetails.java

CustomAuthenticationProvider.java

WebSecurityConfig.java

提前致谢!

0 投票
1 回答
3282 浏览

node.js - 如何使用具有正确标头和 SHA512 散列令牌的节点生成正确的 TOTP?

我最近分配的一个学校项目有一个我们必须完成的编码挑战。挑战有多个部分,最后一部分是上传到私有 GitHub 存储库,并通过在特定条件下发出 POST 请求来提交完成请求。

我已经成功完成了挑战的其他部分,并且一直在提交请求。提交必须遵循以下规则:

构建您的解决方案请求

首先,构造一个 JSON 字符串,如下所示:

{

    "github_url": "https://github.com/YOUR_ACCOUNT/GITHUB_REPOSITORY",

    "contact_email": "YOUR_EMAIL"

}

在 中填写您的电子邮件地址YOUR_EMAIL,以及包含您的解决方案的私有 Github 存储库YOUR_ACCOUNT/GITHUB_REPOSITORY。然后,使用 JSON 字符串作为正文部分向以下 URL 发出 HTTP POST 请求。

CHALLENGE_URL

内容类型

请求的 Content-Type: 必须是application/json.

授权

URL 受 HTTP 基本身份验证保护,RFC2617 第 2 章对此进行了说明,因此您必须在 POST 请求中提供 Authorization: 标头字段。

  • 对于 HTTP 基本身份验证的用户 ID,请使用您在 JSON 字符串中输入的相同电子邮件地址。
  • 对于密码,请提供符合 RFC6238 TOTP 的 10 位基于时间的一次性密码。

授权密码

要生成 TOTP 密码,您需要使用以下设置:

  • 您必须根据 RFC6238 生成正确的 TOTP 密码
  • TOTPTime Step X是 30 秒。T0为 0。
  • 用于HMAC-SHA-512哈希函数,而不是默认的HMAC-SHA-1.
  • 令牌共享密钥是用户 ID 后跟 ASCII 字符串值"APICHALLENGE"(不包括双引号)。

共享秘密示例

例如,如果 userid 是"email@example.com",则令牌共享密钥是"email@example.comAPICHALLENGE"(不带引号)。

如果您的 POST 请求成功,服务器将返回 HTTP 状态代码 200 。

我试图非常仔细地遵循这个大纲,并以不同的方式测试我的工作。但是,似乎我无法正确处理。我们应该从 Node 服务器后端发出请求。这是我到目前为止所做的。我创建了一个新的 npm 项目,npm init并安装了您将在下面的代码中看到的依赖项:

据我了解,我不确定我在哪里犯了错误。我试图非常小心地理解这些要求。我已经简要查看了挑战概述的所有文档,并收集了在给定条件下正确生成 TOTP 所需的必要要求。

我发现 npm 包otplib可以通过我传入的选项来满足这些要求。

但是,我的解决方案是不正确的。当我尝试提交我的解决方案时,我收到错误消息,"Invalid token, wrong code". 有人可以帮我看看我做错了什么吗?

我真的不希望我所有的努力都白费,因为这是一个漫长的项目。

非常感谢您在这方面的时间和帮助。我很感激。

0 投票
1 回答
203 浏览

erlang - 将 TOTP 实现与 Google Authenticator 匹配

(解决方案)TL;DR: Google 假定密钥字符串是 base32 编码的;1I0替换任何O。这必须在散列之前解码。

原始问题

我很难让我的代码与 GA 匹配。我什至从当前时间步开始追逐 +/- ~100,000 的计数器,但一无所获。看到我的函数通过了 RFC 6238 附录中的 SHA-1 测试,我感到非常兴奋,但是当应用于“现实生活”时,它似乎失败了。

我什至在 Github 上查看了 Google Authenticator 的开源代码(这里)。我使用密钥进行测试:"qwertyuiopasdfgh". 根据 Github 代码:

我相信我的密钥不会被修改。跟踪文件,似乎密钥通过调用保持不变:AuthenticatorActivity.saveSecret() -> AccountDb.add() -> AccountDb.newContentValuesWith().

我比较了三个来源之间的时间:

  • (二郎壳):now()
  • (重击):date "+%s"
  • (谷歌/bash):pattern="\s*date\:\s*"; curl -I https://www.google.com 2>/dev/null | grep -iE $pattern | sed -e "s/$pattern//g" | xargs -0 date "+%s" -d

他们都是一样的。尽管如此,我的手机似乎离我的电脑有点远。它将更改与我的计算机不同步的步骤。但是,我试图将正确的时间步长 +/- 数千次,但什么也没找到。根据NetworkTimeProvider班级,这是应用程序的时间源。

此代码适用于 RFC 中的所有 SHA-1 测试:

为了使其真正匹配 RFC,需要针对上面的 8 位数字进行修改。我对其进行了修改以尝试追踪正确的步骤。目标是弄清楚我的时间是怎么错的。没有解决:

有什么明显的突出吗?

0 投票
1 回答
537 浏览

algorithm - HOTP - 计数器值安全

关于安全问题,我有两个关于“(H)OTP算法”的问题。

我们都知道“TOTP”是如何工作的,我们扫描一个二维码,每 30 秒就会显示一个新的 6-8 位代码,几乎没有魔法。

现在回到“HOTP”,除了来自“TOTP”的有效载荷,我们还得到一个“计数器”值。

在客户端显示计数器值是否安全?还是会导致任何安全问题?

还有一个普遍的问题:“秘密”值总是 16 位吗?(我问是因为我看到 mfa-applications 接受少于 16 位数字)

谢谢!

0 投票
1 回答
356 浏览

azure - Azure B2C 使用策略配置 OTP 参数

我正在尝试使用策略而不是用户流来配置 B2C 租户。为此,我使用SocialAndLocalAccount模板作为起始基础。我想做的一件事是配置电子邮件的验证参数,这样我就可以选择代码的长度、到期时间等。我并不关心有像SendGrid示例那样的自定义电子邮件,只是想能够配置基本参数。

我一直在关注他们在文档中的otp示例并设法正确显示该选项,但单击“发送代码”时我从未收到电子邮件。我错过了什么吗?还有另一种方法可以实现这一目标吗?

我是 Azure B2C 和策略的新手,因此我希望您能提出任何建议。谢谢!

0 投票
1 回答
241 浏览

javascript - 带有 TOTP 密码的 POST 请求:对预检请求的响应未通过访问控制检查

我需要使用 TOTP(基于时间的一次性密码)向URL发出带有数据的 POST 请求。我不断从服务器收到以下消息。

==================================================== ======

从源“ http://localhost:3000 ”访问URL处的 XMLHttpRequest已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:“Access-Control-Allow-Origin”标头具有值“ https://topic.name.com ' 不等于提供的来源。

==================================================== ======

我使用 otplib 作为库来帮助我生成 TOTP。

  1. TOTP 的设置为 30 秒间隔(默认)
  2. T0 为 0(纪元)
  3. 数字是 10
  4. HMAC-SHA-512 算法

标头要求(由服务器指定):

  1. HTTP 基本身份验证,如 RFC2617 第 2 章中所述
  2. 内容类型:'应用程序/json'

以下是我到目前为止的代码。

我真的不明白为什么会出现 CORS 问题,可能是我的标题错误吗?

非常感谢您的帮助,感谢您的宝贵时间。

0 投票
0 回答
2875 浏览

amazon-cognito - 尝试设置用户 MFA 首选项时出错

我正在使用 AWS CLI 启用仅具有 TOTP MFA(无 SMS)的 MFA 用户池。

aws cognito-idp set-user-pool-mfa-config --user-pool-id xxxx_xxxx --mfa-configuration 可选 --software-token-mfa-configuration Enabled=true

看起来还可以,对吧?但是当我尝试设置用户首选项时,我不断收到此错误:

调用 AdminSetUserMFAPreference 操作时发生错误 (InvalidParameterException):用户尚未设置软件令牌 mfa

命令: aws cognito-idp admin-set-user-mfa-preference --user-pool-id xxxx_xxxx --username username@email.com --software-token-mfa-settings Enabled=true

尝试使用 admin-set-user-preference 也不起作用: aws cognito-idp admin-set-user-settings --user-pool-id us-xxxx-xxxx--username username@email.com --mfa -option DeliveryMedium=EMAIL

调用 AdminSetUserSettings 操作时发生错误 (InvalidParameterException):当前仅支持 phone_number 属性作为 MFA 选项。

我错过了什么?它是否需要文档中未提及的额外配置?


解决方案:

首先,您需要获取用户的 ACCESS_TOKEN 并继续启动 TOTP 流程:

aws cognito-idp associate-software-token --access-token ACCESS_TOKEN

(这将生成一个您可以在 Google Authenticator 中使用的唯一代码)

使用从 Authenticator 应用程序中检索到的 TOTP 代码运行:

aws cognito-idp verify-software-token --access-token ACCESS_TOKEN --user-code USER_CODE

使用来自上一个命令的成功消息,您可以更改用户首选项:

aws cognito-idp admin-set-user-mfa-preference --user-pool-id xxxxx --username xxxxxxx --software-token-mfa-settings Enabled=True,PreferredMfa=True

0 投票
1 回答
471 浏览

node.js - OTP 移动应用程序的推送通知

我收到了以下挑战:“我希望你开发一个基于 react native 的移动应用程序。它是一个身份验证应用程序。这意味着我想打开一个网站并尝试登录,当我登录时。我会收到一个推送通知当我打开设备时,我会在网站上输入一个代码,当我这样做时,我应该登录”。

我还没有从代码开始,我试图弄清楚这个过程将如何完成。我正在考虑使用 Node.JS 实现 TOTP 算法,但后来我陷入了应用程序如何知道我们登录网站并发送推送通知的问题上。