问题标签 [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 回答
423 浏览

java - 是否可以设置 Twilio 验证 api 令牌到期时间?

我想使用 Twilio 的“验证”服务进行 4 位 OTP 验证,但我没有看到 api 文档中提到任何到期时间。我不能在那里使用“Authy”服务,因为我的要求是有 4 位数的 OTP。是否可以在验证 api 中设置到期时间或是否有任何标准时间?

0 投票
2 回答
1000 浏览

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

发起 HTTP 发布请求时出现错误:

'访问被拒绝:无效的令牌,错误的代码'。我已经尝试了所有可能的解决方案,但我无法传递此错误。

本次挑战赛详情:

授权

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

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

您必须阅读 RFC6238(以及勘误表!)并自己获得正确的一次性密码。TOTP 的 Time Step X 为 30 秒。T0 为 0。使用 HMAC-SHA-512 作为哈希函数,而不是默认的 HMAC-SHA-1。令牌共享密钥是用户 ID,后跟 ASCII 字符串值“HENNGECHALLENGE003”(不包括双引号)。

0 投票
1 回答
225 浏览

auth0 - MFA 一次性密码图片

我正在使用 auth0 一次性密码选项在我的应用程序中设置 MFA: https ://auth0.com/docs/mfa/guides/configure-otp

这允许用户使用谷歌身份验证器或读取 QR 码的类似应用程序设置 MFA。

我也是多个服务中这种 MFA 的用户,例如 Slak、GitHub 或 Auth0 本身。我已经看到,当有很多应用程序时,它可能会有点混乱,但是 Slak 或 Github 在身份验证器应用程序中设置了他们的图片。

无论如何,我可以在 Auth0 上使用此选项设置我的应用程序的图标吗?我猜图像也在扫描的二维码中。如果 auth0 没有为您提供该选项,但它存在,是否还有其他选项可以为我的用户(包括我的应用程序图标)生成 MFA QR?

0 投票
1 回答
1133 浏览

javascript - 如何解决“拒绝访问:无效令牌,错误代码”的问题?

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

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

构建您的解决方案请求

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

{

}

填写 YOUR_EMAIL 的电子邮件地址,以及在 YOUR_ACCOUNT/GITHUB_REPOSITORY 中使用您的解决方案的私有 Github 存储库。然后,使用 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 的 Time Step X 为 30 秒生成正确的 TOTP 密码。T0 为 0。使用 HMAC-SHA-512 作为哈希函数,而不是默认的 HMAC-SHA-1。令牌共享密钥是用户 ID,后跟 ASCII 字符串值“APICHALLENGE”(不包括双引号)。共享秘密示例

例如,如果用户 ID 是“email@example.com”,则令牌共享密钥是“email@example.comAPICHALLENGE”(不带引号)。

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

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

0 投票
1 回答
180 浏览

passwords - 通过 otp 中的 OTP

我在使用 pass 时有一个问题:带有插件 pass-otp 的标准 unix 密码管理器。

我还在 Google Authenticator 中生成 OTP,有时即使输入(秘密)和算法相同,生成的代码也会有所不同。

因为它也是基于时间的,所以我已经同步了两个设备(Linux PC 和 Android 手机)。但是,我仍然得到不同的代码。任何想法为什么?

0 投票
1 回答
102 浏览

pam - 在服务器之间迁移 Google Authenticator 密钥

我有一个 OpenVPN 服务器(ubuntu 14.04),pam-google-authenticator (20130529-2)
我正在尝试创建一个新的 OpenVPN 服务器(ubuntu 18.04)pam-google-authenticator (20170702-1)
并迁移所有现有的密钥。

使用创建新密钥时,google-authenticator我设法连接并且一切正常,但是当我尝试旧密钥(从旧服务器复制)时,身份验证失败:
pamtester openvpn shalevbs authenticate->pamtester: Authentication failure
两个服务器都同步到同一个 NTP

我还注意到旧密钥是16 个字符,而新密钥是26 个字符

有没有人遇到过这样的事情?

0 投票
1 回答
1640 浏览

amazon-web-services - AWS Cognito 软件令牌 MFA 工作一次,然后意外恢复为 SMS MFA 以供将来所有登录

背景:

我有一个 React Web 应用程序(正在使用aws-amplify),它连接到/使用 AWS Cognito 用户池进行身份验证。

我正在尝试启用 MFA,更具体地说,我希望我的用户可以选择使用软件令牌 TOTP MFA(即 Google Authenticator 或类似应用程序)。

当我将我的用户池设置为需要 MFA 时,我被迫启用 SMS MFA,然后软件 TOTP 是可选的。就我而言,我启用了 TOTP。

在我的网络应用程序中,我通过以下方式添加了必要的组件:

如果您不熟悉aws-amplify-reactand/or SelectMFAType,此组件提供了一个 UI 元素,用户可以在其中选择是否喜欢使用 SMS 或软件 TOTP 作为其 MFA 方法。如果他们选择 SMS,则使用他们之前验证的电话号码,一切正常。

如果用户选择 TOTP,他们会在他们选择的身份验证器应用程序中显示一个 QR 码以进行扫描,并提示他们输入字段以输入来自身份验证器应用程序的 6 位数字以验证 TOTP。对于在任何其他网站上使用 TOTP MFA 选项的任何人来说,这都是非常标准的。如果用户从应用程序输入正确的代码,他们的 TOTP 选择就会得到验证。

简而言之SelectMFAType,它只是快速原型和测试的捷径/替身,无需创建自定义组件。

问题:

现在,这是问题以及如何重现它。(起点是刚刚启用 TOTP 的用户。):

  1. 用户注销。
  2. 用户登录。
  3. 如果用户名/密码正确,则提示用户输入 TOTP。
  4. 如果 TOTP 正确,则用户已登录。到目前为止,这一切正常,但不会一直如此。
  5. 用户注销。
  6. 用户登录。
  7. 如果用户名/密码正确,系统将提示用户输入 SMS MFA,并将收到一条带有 6 位代码的短信。这是意外的行为。我希望它会继续从他们的身份验证器应用程序请求 TOTP MFA,除非用户将他们的首选方法更改回 SMS。
  8. 从现在开始,用户将只会被要求 SMS MFA。

在步骤 4 和步骤 7 之间,用户的偏好没有改变。React 应用程序或 AWS 用户池设置中绝对没有任何变化。

此外,如果我通过 AWS CLI 命令询问用户 aws cognito-idp admin-get-user --user-pool-id ${MY_ID} --username ${MY_USER_NAME},我可以确认用户的 MFA 首选项正是我所期望的:

MFA 质询是用户尝试进行身份验证时来自 AWS Cognito 的 API 响应,它是SMS_MFASOFTWARE_TOKEN_MFA。就我而言,我得到了一个SOFTWARE_TOKEN_MFA挑战,但随后所有未来的挑战都会违背我的意愿恢复为SMS_MFA.

如果我重复 TOTP 设置过程(从验证器应用程序中删除条目,重新验证等),我可以再次重复所有步骤。我的意思是,MFA 会期待一次 TOTP,然后在第一次之后再次恢复到 SMS。

任何人都可以阐明这种情况吗?你经历过吗?它是 AWS Cognito 中的已知问题/错误吗?难道我做错了什么?我觉得如果这个坏了,会产生相当大的噪音,但我找不到其他人有同样的问题。

我尝试过的事情:

  • 在这里、谷歌和 AWS 论坛广泛搜索有相同问题的其他人。
  • 我已经在 AWS 论坛上发帖,但没有任何结果: https ://forums.aws.amazon.com/thread.jspa?threadID=324131
  • 在. SelectMFAType_ aws-amplify-react我将把这个自定义组件粘贴到这个问题的底部作为参考。
  • 完全销毁并重新创建了 AWS Cognito 用户池。我认为它可能已损坏或无法正常工作。这没什么区别。

SetupTOTP.js零件:

0 投票
1 回答
85 浏览

azure - Azure AD B2C - 在浏览器关闭/重新打开之间维护 OTP

Azure B2C中在displaycontrol/email验证中使用的otp有以下参数:

ReuseSameCode:当给定代码尚未过期且仍然有效时,是否应给出重复代码而不是生成新代码。默认值为假。

关联

我的问题 - 启用此功能时,我们注意到代码仅保留在同一个浏览器会话中,即如果用户不小心关闭浏览器并返回,他们会得到一个新代码,即使他们仍在时间之内令牌有效的限制(我们将其提高到 20 分钟)。

我们是否可以设置任何设置,以便即使在浏览器重新启动后也可以重复使用相同的令牌?

0 投票
0 回答
259 浏览

node.js - 如何在节点 js 中由 TOTP 生成密码的 HTTP 基本身份验证发布请求

我已经成功完成了挑战的其他部分,并且一直在提交请求。请任何人都可以帮助我发出 POST 请求,以便我可以发送我的解决方案。相信我,这是一场真正的斗争。!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!提交必须遵循以下规则:

构建您的解决方案请求

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

{

}

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

内容类型

请求的 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 。

0 投票
1 回答
604 浏览

java - 如何根据 RFC-4648 在 Java 中将数字转换为 base32

实际上,我正在尝试在我的应用程序中使用 TOTP,而 google 身份验证器要求密钥采用 base32 格式。这就是我尝试将密钥转换为 base32 格式的原因

假设我有一个数字 = 150820200825235。

这个维基百科页面说RFC-4648是最常用的 base32 字母表。

这是我试图将数字转换为基数 32 的 java 代码:

现在它正在将其打印为输出:

495e87tgcj

它包含 9,根据 RFC-4648 是无效的。

如何根据 Java 中的 RFC-4648 转换为 base32 数字?

另一件事 如果最广泛使用的 Base32 字母表确实符合 RFC-4648,那么为什么 java 不默认支持它呢?还是我的理解/代码有问题?