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

express - 如何使用 passportjs 实现可选的两因素身份验证

我已经在 Express 中实现了一个 API,使用 passportjs 本地策略进行身份验证,现在我想通过增加用户使用两因素身份验证登录的可能性来加强安全性,因为它存在 passport-totp 策略,我阅读了它和看到了一些工作示例,但我还没有找到我想要实现的内容。我想在同一条路线上(比方说/登录)检查身份验证用户是否先前启用了 2fa(这将由用户设置处理),如果已启用,则仅在用户完成时对其进行身份验证通过 2fa 附加验证进行身份验证,如果未启用,则让用户通过简单的登录/密码凭据进行身份验证。

如果有人可以向我解释如何做到这一点(大图),或者如果您知道任何看起来相似的实现示例,我将非常高兴!

谢谢

0 投票
0 回答
60 浏览

authentication - 是否可以增加 google-authenticator PAM(Pluggable authentication Module)生成的代码的默认时间段?

我已将 google-authenticator PAM 集成到我的 tacacs+ 服务器。我已按照这些在线资源中描述的步骤进行集成https://networkjutsu.com/tac-plus-google-authenticator/https://geeksops.com/?p=530。一切都按预期正常工作。验证器应用程序生成的代码默认有效时间为 30 秒。此外,在生成 QR 码期间提示的提示是为了补偿时间偏差,它们允许在当前时间之前和之后使用额外的令牌,使默认窗口为 1 分 30 秒。实际提示如下所示。

默认情况下,令牌的有效期为 30 秒,为了补偿客户端和服务器之间可能存在的时间偏差,我们允许在当前时间之前和之后使用额外的令牌。如果您遇到时间同步不佳的问题,您可以将窗口从其默认大小 1:30 分钟增加到大约 4 分钟。你想这样做吗(是/否)

但是我的疑问是,生成代码的时间可以延长吗?(比如5分钟左右)

是的,我尝试通过对上述提示响应是来增加窗口。但我没有看到任何变化。如果可能的话,任何人都可以用更简单的术语解释提示的含义吗?

生成二维码命令时还会生成一个秘密文件~/.google_authenticator。所有对提示的响应都存储在其中。我试图更改秘密文件中的窗口大小,虽然它是一个只读文件,但我没有注意到任何变化,事实上它停止了对该特定用户的身份验证。以下是秘密文件的内容。

" RATE_LIMIT 3 30 16226417555 16226417621 " WINDOW_SIZE 17 " DISALLOW_REUSE 540880543 540880582 " TOTP_AUTH

0 投票
0 回答
40 浏览

swift - 有没有办法使用来自安全飞地的私钥来生成 TOTP?

我想使用从服务器收到的密钥生成 TOTP。在我读过的每本指南上,它都说:

在安全飞地中生成私钥并使用它来加密可用于生成 TOTP 的公钥

但我不想让公钥用于生成,因为它可以从内存中接收。我知道安全飞地中的密钥可用于使用 sha-1 进行签名,但我可以用它生成 TOTP 吗?从服务器接收到密钥时,我可以将密钥保存在内存中,因为它只发生一次。

0 投票
1 回答
710 浏览

reactjs - 如何使用 AWS Cognito AmplifyAuthenticator 设置可选 MFA?

如果我将一个认知池设置为requireMFA (TOTP),我在客户端的实现使用AmplifyAuthenticatorfrom@aws-amplify/ui-react就可以自动正常工作。

但是,如果我在 MFA 所在的位置创建一个认知池,optional则用户没有自动选择加入 MFA 的选项,工作流程是使用用户名/密码的典型入职。我也找不到任何好的文档。我还尝试明确地将一个<AmplifySelectMfaType>组件作为子组件,<AmplifySignIn>但它没有做任何事情。

设置非常简单,如果找到 Cognito 用户,我们在顶层显示应用程序,否则显示AmplifyAuthenticator登录。我们不允许用户注册我们的应用程序,因此当他们第一次登录时,Cognito 中存在用户定义。

app.component.tsx

0 投票
0 回答
134 浏览

amazon-web-services - AWS Cognito:新用户临时登录后,使用 SOFTWARE_TOKEN_MFA

我为我们的开发环境创建了一个用户池,其中我已经要求 MFA。AdminCreateUser然后我使用传递用户的phone_numberand的地方创建一个新email用户。

我面临的问题仅在 e2e Cypress 测试期间。创建用户后,我可以使用临时密码登录,但在下一步中,它会将我带到 SMS_MFA 挑战。SMS_MFA在 e2e 测试期间,我无法继续进行。

但是,如果我可以SOFTWARE_TOKEN_MFA在设置永久密码后进行设置,那将解决 e2e 测试的问题。对于SOFTWARE_TOKEN_MFA,我正在使用一个 OTP 生成器 NodeJS 库,它接收密码并给我一个 OTP。

任何人都知道如何SOFTWARE_TOKEN_MFA在 AWS Cognito 中设置永久密码?

0 投票
1 回答
262 浏览

authentication - AWS Amplify/Cognito - 一种仅在用户首次登录时设置 TOTP MFA 的方法

我正在设置 MFA 不是可选的身份验证,这意味着从注册后的第一次登录尝试开始,用户将被要求设置 MFA(在这种情况下,我将使用基于时间的一次性密码,或 TOPT) . 为此,我可以看到以下步骤是合理的:

1)通过登录表单获取用户信息 -Auth.signUp()

2)从步骤1)中检索到的用户数据确定是否已经为用户设置了基于TOPT的MFA。如果没有,请转到步骤 3),否则转到步骤 4)

3) 如果没有设置 TOPT,请重定向到将生成 QRCode 的表单以设置此 MFA 功能。验证代码后,登录用户。

4) 如果设置了 TOPT,请询问密码。验证后,登录用户。

我的困境:似乎我无法获得步骤 2) 中的信息,即是否已经为用户设置了基于 TOPT 的 MFA,而没有对用户进行身份验证。challengeName通过步骤 1) 在有效负载中检索到的标志Auth.signUp()仅向我提供有关是否启用 MFA ( 'MFA_SETUP') 的信息,而不是是否已经设置了基于 TOTP 的 MFA。为此,该方法Auth.getPreferredMFA()可以解决问题,但它仅在传递给它的用户对象代表经过身份验证的(或已经登录的)用户时才有效。有没有办法确定是否为尝试登录(但尚未登录)的用户设置了 TOTP MFA?

此外,任何其他解决此问题的解决方案都将受到欢迎。肯定有人遇到了与我相同的情况,即从第一次登录开始就强制执行 MFA。

0 投票
1 回答
38 浏览

java - 在 commons-codec 升级后 Base32 没有抛出异常

我有一个TOTP Authenticator项目,它使用TOTP (RFC 6238)生成一个六位数的一次性密码。在内部它使用来自 Apache Commons Codec 的Base32类:

commons-codec升级1.14 -> 1.15之后,单元测试开始失败:

如何修复测试?

0 投票
1 回答
93 浏览

ruby-on-rails - RubyGem ROTP 在到期间隔之前到期

我正在构建一个 OTP 并实现了 ROTP gem。然而,ROTP 的行为并不是我所期望的。

例如,当请求一个间隔为 30 秒的 ROTP 时

注意它没有达到 30 秒的到期时间,但已经返回给你一个新的 otp

我对基于时间的 OTP 的预期行为是

如何实现基于时间的 OTP 的预期行为?

0 投票
0 回答
64 浏览

laravel - 在 Laravel 中使用 Fortify 时如何控制 TOTP 窗口大小?

我已经在我的 Laravel 应用程序中安装了 fortify 包,并且正在使用 2FA 和 Google Authenticator 进行测试和测试。我的印象是过去生成的任何代码都不再有效,但作为一种尝试,我一直在等待代码失效,然后使用它并且它可以工作!观看此youtube 视频后,我了解到 TOTP 将仅具有一个窗口大小以允许使用过去生成的代码,并且此窗口大小使用 .a 时间单位,因为它是TOTP(基于时间的 One-时间密码),这是有道理的!

我的问题是 fortify 使用的默认窗口大小是多少?以及如何控制窗口大小以仅允许当前活动代码工作?

0 投票
1 回答
496 浏览

php - 通过 Authenticator App 将 2FA 或 OTP(通过电子邮件)添加到 Laravel Fortify 2FA

我正在使用 Laravel 8.x 与 Fortify 和 Jetstream/Livewire 并打开 2FA / OTP:

配置/fortify.php

我还对我的路由组等进行了一些定制,以允许某些页面无需身份验证而其他页面。这很好用。然而,我们的许多用户并不是真正的技术人员,并且发现使用 Auth 应用程序很烦人(我有点同意这一点),尽管我喜欢使用 Fortify 在 2FA 中烘焙。

我想做的是:

  1. 修改现有的 Fortify 代码以选择性地允许通过电子邮件实现 2FA。可能很难实现一个或另一个,或两者兼而有之,以便用户可以使用任何可用的方法,但似乎可以允许用户选择他们想要的方法。使用 Auth App 内置 Fortify 方法,或使用其他包发送电子邮件 OTP 或通过在发布需要修改的文件后修改 Fortify 代码。

我环顾了一下,下面的那个看起来很简单,但我想将那个用于电子邮件方法,将 Fortify 用于 Authenticator 方法。那将是用户偏好选项。

github.com/seshac/otp-generator

我尝试通过使用 Fortify 的就地 Laravel 8.x JetStream 框架来做到这一点,方法如下:

视图/auth/login.blade.php

将表格更改为:

在表格之后添加了这个(我也有 Spatie Cookie 提醒包)。

然后在页面上添加了相当多的 Javascript:

这基本上绕过了常规的 /login 路由,直到我从后端收到回复,表明 OTP 已通过电子邮件验证(可能稍后是 SMS)。

在以下位置添加了一条新路线:

路线/web.php

在我的 EmailController 中创建了一些新方法(可能应该将其重构到不同的位置或文件,但如下所示。处理 OTP 验证以及设置时: Session::put('OTP_PASS', true);

Http/Controllers/EmailController.php

然后最后在:

Providers/FortifyServiceProviders.php,我检查了Session::get('OTP_PASS') === true以验证登录。它实际上似乎“工作”,但如果用户在数据库中也有电话号码,我想可能扩展它以支持通过 SMS 发送 OTP。我现在正在使用电子邮件,因为它总是填充在数据库中。他们可能有也可能没有电话号码,我会将通知方法设为用户首选项。

我在另一个框架上设置了 AWS SNS,但不确定如何在 Laravel 上进行设置。 在 generateAndSendOTP($identifier) 方法中,我想添加一些东西来检查他们的用户偏好通知方法,然后将 OTP 发送到电子邮件和/或通过 SMS。 所以这是一个问题。另一个问题只是现在的整个设置,因为我可能需要将东西移动到不同的位置,现在这似乎正在工作。最好打包最终通过电子邮件和/或短信添加 OTP。Authenticator App 中的烘焙方法不应该真正受到影响,我可能希望在他们通过电子邮件/短信登录后选择性地保护某些路由,以应对可能有多个用户使用帐户的情况,例如代理,但帐户所有者不希望他们通过 Authenticator App 进入受内置 2FA 保护的部分。

谢谢。