问题标签 [one-time-password]
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.
python - python:良好的一次性令牌生成策略
所以我研究了一下,发现“一次性密码”这个词通常是指时间同步的硬件时钟。
我们没有那个。我们正在创建一个工作流程,员工可以在其中注册客户,然后客户会收到一封包含登录链接的电子邮件,该链接仅有效一次(客户必须提供一些额外的、弱的和简单的个人信息,例如电话号码才能登录)
所以严格来说,这不是 OTP,但可能更像是一次性令牌。
这种情况有什么好的策略?我的主要不确定性是我是否需要在 DB 中加密这个令牌到目前为止我已经确定:
- 使用 生成一次性令牌
uuid.uuid4()
。这非常简单易行。但是,没有加密。 - 生成一次性令牌并将其加密保存到数据库,然后将其编码为 HTML 安全并与链接一起发送。
我想知道是否需要加密令牌。通常我们当然需要在数据库中加密密码。但是这个令牌无论如何都会通过HTTP发送(我猜是base64编码)所以我看不到加密它的优势......
python-2.7 - ssh 的两级身份验证
我正在尝试为 OPEN SSH 实现两级身份验证,第一个是 ssh 公钥和私钥身份验证,第二个是 OTP 身份验证,我正在使用谷歌身份验证器。一切都按预期工作,直到第一级身份验证并生成 OTP 并将其作为第二级的输入。我被困在这里..如果 OTP 匹配,我正在执行命令给用户 shell。我不清楚如果它不匹配,我应该做什么,因为第一级身份验证已经完成。我应该如何将用户从 shell 中注销...?
下面是代码:
android - 通过 Android 中的 SMS 通道获取有关 SMS 传送的通知
我通过 android 应用程序向用户发送 OTP SMS。为了发送短信,我正在使用短信渠道。所以我只是点击 URL 来发送短信。我希望我的应用程序在 SMS 发送给用户时得到通知,以便我可以自动读取该 OTP。
android - 在 android 中使用 Sinch SMS Verification 验证收到的 OTP 时会触发错误的回调
我正在我的应用程序中集成 Sinch SMS 验证 API,并且已经完成了一半。到目前为止,我能够为给定的手机号码发送和生成 OTP 请求/响应,并在该手机号码上接收。但是,当我尝试验证收到 OTP 错误时,回调会被触发。
下面是我的代码,
每当我在文本框中输入收到的 OTP 或错误的 OTP 并单击回调下方的提交按钮时,都会触发此回调
理想情况下,它应该在 Callback 以下触发
参考链接: https ://www.sinch.com/docs/verification/android/#verificationlistener
ios - 当我收到消息 iPhone 应用程序时将 OTP 自动填充到 TextField
从我的应用程序注册时,我正在向注册的手机号码发送 OTP 我想在我的应用程序中检索该 OTP 而无需打开 SMS 应用程序...当用户收到 OTP 消息时,我需要在此处显示该 OTP ...我该如何实现这在 iOS 中?我也有用户电话号码。
在搜索中,我找到了这个 ,但我不清楚如何启动它。任何人都可以帮助我吗?
python - Google 身份验证器代码与服务器生成的代码不匹配
背景
我目前正在开发一个双因素身份验证系统,用户可以使用他们的智能手机进行身份验证。在用户可以使用他们的设备之前,他们需要先验证它。为此,他们需要扫描我给他们的二维码并输入随后显示的代码。
问题
QR 码的扫描工作正常,并且可以被 Google Authenticator 应用程序正确读取。但是,生成的代码与我在服务器上生成的代码不匹配。
我试过什么
我已经尝试了几件事,希望能找到我的问题。
我曾尝试在 Google Authenticator 应用程序中直接插入默认密码:
'thiswasmysecretkeyused'
和密码的base64.b32encode()
编码版本:'ORUGS43XMFZW26LTMVRXEZLUNNSXS5LTMVSA===='
但这两个生成的代码都与服务器不同。我读到
====
密钥的尾随可能会导致它不起作用,所以我也尝试添加一个没有这些的。仍然没有好的结果(它们生成相同的代码)我尝试使用不同的算法生成 TOTP 代码,因为万一我使用的算法 ( django-otp ) 不正确。我使用的不同算法取自这个答案。两种算法在使用相同的密钥时生成相同的代码。
我检查了我系统上的时间。我看到操作系统的显示
15:03
就像我的智能手机一样。将时间都转储到python中后time.time()
,datetime.datetime.now()
我看到返回的时间比操作系统时间晚一小时;显示14:03
. 我尝试3600
在用于代码生成的时间戳中添加秒数,但无济于事。我尝试了其他几件事,但不太记得它们都是什么。
我在 Google Authenticator 中查找了接受密钥的代码,并验证它需要一个 base32 字符串。因此,据我所知,我对密钥的编码是正确的。从代码(EnterKeyActivity.java,第 78 行):
验证输入字段是否包含有效的 base32 字符串
代码
生成密钥;
生成二维码;
生成 TOTP 代码;
如果您需要更多代码,例如 django-otp 实际 totp 生成代码,请告诉我。
错误
没有错误。
预感
我的预感是我在生成密钥或将密钥传递给 Google Authenticator 时一定有问题。因为即使手动将密钥放入 Google Authenticator 也无法生成正确的代码。保存后,Google 身份验证器是否会对密钥执行更多操作,例如添加用户?
我还注意到在我使用的另一种算法中,那里的秘密首先被解码;
我的原始密钥(SHA512 哈希)错了吗?我应该还是不应该对它进行编码base64.b32encode()
?如果我尝试扫描生成的 QR 码而不对哈希进行编码,Google Authenticator 会说它不会将其识别为(有效)密钥。
javascript - 如何在 JavaScript 中将 otpauth 密钥转换为 otp pin?
我想编写一个 JavaScript 应用程序,例如 Authy 或 Google Authentificator。遗憾的是,我没有找到任何信息如何计算实际 PIN(一次性密码)的密钥以将其用于登录。
我知道,我必须将此密钥与实际时间戳一起使用,但不知道如何组合密钥和时间戳,然后生成 Google Authentificator 和 Authy 可以生成的 6 位 OTP。
如果我在 Google 中激活 2 因素身份验证,我会得到一个 QR 码,它会生成这样的链接
所以x6wup537ptmmohbjkczluxit4r6eppfc是密钥。我必须怎么做才能从中获得 OTP,它实际上可以使用 Google 帐户登录?
最好的问候,谢谢,凯瑟基维
c# - OTP 基本身份验证
我想为我的 Web API 应用程序实现基于 OTP 的身份验证。我对 OTP 身份验证有一些想法。对于 OTP,我们生成了一个随机字母数字,我将其存储在我的数据库中。并将此 OTP 发送到用户手机。用户将提交此 OTP 并将此 OTP 与 db 进行匹配。这是正常的流程。我需要更多地保护它,这怎么可能。意味着,需要通过 sha256 对 OTP 进行哈希处理。然后我想将这个散列值存储在数据库中。到这里就好了。从下一步开始,我是否应该将此 OTP 作为纯文本发送到用户手机。然后移动客户端应用程序将此 OTP 作为纯文本传递,在服务器中散列此纯文本 OTP 并将其与 DB 进行比较?是否正确,或者不是纯文本,我是否想将 OTP 作为哈希传递给用户电话号码,是否正确,是否安全。我对此有点困惑。
请帮我。
android - 为什么使用 TOTP/HOTP 而不是仅仅使用 math.random()?
我正在尝试在我的 android 应用程序中添加用于登录的 OTP 功能。我正在使用 node.js 作为后端。现在,首先我想到了生成随机数,例如math.random()
.
我可以在服务器端轻松生成 PTP,并将它们存储在我的 MongoDB 数据存储中,然后在用户输入 OTP 时匹配它们,但现在我遇到了这些用于 OTP 的预构建模块,这个 Speakeasy https://www.npmjs .com/package/speakeasy。
有两种类型的方法 HOTP/TOTP。我在问为什么有人会使用这两个而不是使用随机数。我的意思是 HOTP/TOTP 有什么用?如果有人在任何应用程序/网站中设计了 OTP 功能,请赐教。
更新 从服务器对任何 android 设备进行 OTP 身份验证的一般方法是什么我的意思是像 zomato、Airbnb 这样的应用程序他们如何对用户进行 OTP 验证?
android - android 应用程序中的移动验证使用speakeasy 作为npm 模块生成otp?
大家好,我正在使用 speakeasy npm 模块在一个时间范围内生成 totp 现在下面是我的工作流程,任何人都可以告诉我我是否遗漏了什么。当用户注册时,我在请求中获取其手机号码,然后将其用作秘密,我正在生成我的 totp,以便每个用户的 totp 可以是唯一的
我通过我的用户的手机号码发送,然后将其发送到服务器以便现在在服务器上检查我正在从 totp 模块再次检查
如果匹配,那么我进行注册,否则现在不是我做的一切是否正确?请告诉我,我的方法有问题吗