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

go - 使用一个秘密生成 totp 与多个秘密

我想在我的网站上使用 2fa 的谷歌身份验证器和 totp 算法。我有 2 个关于生成 QR 密码的问题。

我计划使用保险库来存储机密以更安全,但我的问题是有没有其他方法可以每次生成机密而不是将其存储在某个存储中?

我在教程中读到我需要为每个用户使用随机密码并将该密码存储在数据库中以进行 otp 验证。

我的想法是将特定秘密存储在安全的地方,并为每个用户使用该秘密生成散列。例如,使用 mySecret+userId 生成哈希

这是一种安全的方式吗?

0 投票
1 回答
4390 浏览

javascript - 如何使用 AWS cognito TOTP MFA?

我很难弄清楚如何使用这个库: https ://github.com/aws-amplify/amplify-js/tree/master/packages/amazon-cognito-identity-js

其中显示用例 27。选择 MFA 方法并使用 TOTP 进行身份验证。

我已经成功地完成了用户名和密码登录并完成了 SMS 代码,但我无法获得associateSecretCode要使用google authenticatorqr 扫描仪扫描的函数中给出的秘密令牌。不断给我一个无效的代码错误

这是我的代码:

生成了二维码,但是在扫描它时,谷歌身份验证器给了我这个错误: 在此处输入图像描述

我在这里做错了什么?

0 投票
2 回答
976 浏览

two-factor-authentication - 如何确保 TOTP 的用户密钥有效?

我正在开发一个 2FA 应用程序。
有没有办法让我使用用户提供的用于生成其令牌的密钥事先有效?

编辑:
澄清:我没有提供登录服务器,而是为用户生成令牌(想想 authy 或 google 身份验证器)

0 投票
1 回答
163 浏览

node.js - iPhone上的两因素身份验证?

我的 nodeJS 服务器应用程序中有一个 2FA 代码,它利用 speakeasy 模块来验证传递的密钥是否有效。我在客户端使用 google Authenticator 应用程序。我正在使用密钥 =“A0B0C0D0E0F0A1B1C1D1E1F2”。这适用于 Android 设备。但是,当我在 Iphone 上尝试相同的操作时,我会遇到以下问题:

  1. Iphone 上的 Google Authenticator 应用程序不允许我添加秘密“A0B0C0D0E0F0A1B1C1D1E1F2”。似乎它有一些关于密钥的本机规则。
  2. 即使我输入了 Iphone 允许的密钥,speakeasy.totp 代码也无法验证,并且总是返回 FALSE。

如何解决此问题以使其在 Android 和 Iphone 设备上都可以使用?

注意:该应用程序仍在测试区域中。prod 中的密钥将存储在永久存储/数据库中。

谢谢。

0 投票
0 回答
445 浏览

python - Not receiving same OTP in a time step/interval - Django-otp

I have set time step as 300sec and TOTP digit as 6. I'm not receiving same OTP in a time step/interval, means receiving different OTP in a given time step. ie, At 2019-11-03 19:15:00, i will get one code; 19:13:00 , i will get another new code.

this is the code:

Result:

Where i'm doing wrong , did i miss some thing..?

0 投票
2 回答
5606 浏览

c# - 使用 otp.net 生成和验证 OTP 代码

我正在使用Otp.NET库来生成和验证 OTP。我想使用 TOTP 算法。生成的 OTP 需要 5 分钟有效。该库建议var totp = new Totp(secretKey, step: 300);用于此目的。但 OTP 在 5 分钟前失效

完整代码

0 投票
0 回答
153 浏览

haskell - 如何正确调用 Data.OTP 中的 TOTP Func?

当我在 Google Authenticator (Android)、Microsoft Authenticator (Android) 和 oathtool (Ubuntu 18.04.3 LTS) 中使用密钥“abcdefghijklmnop”时,我得到了匹配的基于时间的一次性密码 (TOTP) 值。不幸的是,当我在以下 Haskell 代码中使用相同的键时(无论是在 Windows 10 还是 Ubuntu 18.04.3 LTS 上),我没有得到匹配的 TOTP 值:

我认为这意味着上面的代码有一个错误。如果我冒险猜测,“theSecretKey”或“curTime”是以无效格式传递的,但我不确定是哪个。

我应该在上面的代码中进行哪些更改才能正确调用 totp 函数?

注意:在使用 oathtool 进行测试时,我能够验证我应该使用 SHA1 哈希算法

0 投票
1 回答
2871 浏览

amazon-cognito - 如何在 AWS Cognito 身份验证过程中包含 TOTP MFA

我正在使用 Cognito 用户池来验证我的 Web 应用程序。我现在一切正常,但现在我需要为它启用 MFA。这就是我现在的做法(提供的所有代码都是服务器端代码):

  1. 注册用户:
  1. 一封电子邮件被发送到用户的地址(在前面的函数调用中称为用户名),其中包含代码。

  2. 用户读取代码并将代码提供给下一个函数调用:

  1. 用户登录:

我对这个过程很满意。但现在我需要为此添加 TOTP MFA 功能。如果我愿意,有人可以告诉我如何更改这些步骤吗?顺便说一句,我知道在创建用户池时需要为用户池启用 TOTP MFA。我只是在询问它如何影响我的注册/登录过程。

0 投票
1 回答
262 浏览

wso2 - 在 WSO2 身份服务器中启用 totp 身份验证的“记住我”不起作用

我有一个正在运行的高效 WSO2 身份服务器(版本 wso2is-5.6.0)和一个新的干净测试实例(版本 5.9.0),并使用具有 2Factor 身份验证的身份提供程序。(基本和顶级)。

当它们都处于活动状态时,“记住我”功能不再起作用。当我禁用 totp 身份验证时,“记住我”功能起作用,并且在浏览器关闭时会话保持活动状态。

有谁知道,如果这是一个配置问题,一个错误或者只是不能那样工作?

deployment.toml 中的配置:

0 投票
1 回答
5517 浏览

spring-boot - 使用 Spring Boot 2 和 Spring Security 5 进行多因素身份验证

我想向 Angular 和 Spring 应用程序添加使用 TOTP 软令牌的多因素身份验证,同时使所有内容尽可能接近Spring Boot Security Starter的默认值。

令牌验证在本地进行(使用 aerogear-otp-java 库),没有第三方 API 提供者。

为用户设置令牌是可行的,但通过利用 Spring Security Authentication Manager/Providers 来验证它们却不行。

TL;博士

  • 将额外的 AuthenticationProvider 集成到Spring Boot Security Starter配置的系统中的官方方法是什么?
  • 有哪些推荐的方法来防止重放攻击?

长版

API 有一个端点/auth/token,前端可以通过提供用户名和密码从该端点获取 JWT 令牌。响应还包括身份验证状态,可以是AUTHENTICATEDPRE_AUTHENTICATED_MFA_REQUIRED

如果用户需要 MFA,则颁发令牌时授予单一授权,PRE_AUTHENTICATED_MFA_REQUIRED有效期为 5 分钟。这允许用户访问端点/auth/mfa-token,他们可以从他们的 Authenticator 应用程序中提供 TOTP 代码并获取完全经过身份验证的令牌以访问该站点。

提供者和令牌

我创建了我的自定义MfaAuthenticationProvider实现AuthenticationProvider

和一个OneTimePasswordAuthenticationToken扩展AbstractAuthenticationToken来保存用户名(取自签名的 JWT)和 OTP 代码。

配置

我有我的自定义WebSecurityConfigurerAdapter,我AuthenticationProvider通过添加我的自定义http.authenticationProvider()。根据 JavaDoc,这似乎是正确的地方:

允许添加要使用的附加 AuthenticationProvider

我的相关部分SecurityConfig看起来像这样。

控制器

AuthController已经注射并将其AuthenticationManagerBuilder拉到一起。

但是,发布反对/auth/mfa-token会导致此错误:

为什么 Spring Security 不选择我的身份验证提供程序?调试控制器向我展示了它DaoAuthenticationProviderAuthenticationProviderManager.

如果我公开我MfaAuthenticationProvider的 bean,它是唯一注册的提供者,所以我得到相反的结果:

那么,我如何获得两者?

我的问题

将附加组件集成AuthenticationProviderSpring Boot Security Starter配置系统中的推荐方法是什么,以便我同时获得DaoAuthenticationProvider和我自己的自定义MfaAuthenticationProvider?我想保留Spring Boot Scurity Starter的默认值并另外拥有自己的 Provider。

防止重放攻击

我知道 OTP 算法本身并不能在代码有效的时间片内防止重放攻击;RFC 6238 清楚地说明了这一点

在对第一个 OTP 发出成功验证后,验证者不得接受 OTP 的第二次尝试,这确保一次性使用 OTP。

我想知道是否有推荐的方法来实施保护。由于 OTP 令牌是基于时间的,我正在考虑将最后一次成功登录存储在用户模型上,并确保每 30 秒时间片只有一次成功登录。这当然意味着用户模型上的同步。有更好的方法吗?

谢谢你。

--

PS:由于这是一个关于安全的问题,我正在寻找来自可靠和/或官方来源的答案。谢谢你。