将TotpSecurityStampBasedTokenProvider与Google Authenticator一起用



我正在我的asp.net web api 2 web服务(非.net核心(上使用TOTP实现2FA。

该实现使用由Microsoft.AspNet.Identity框架提供的TotpSecurityStampBasedTokenProvider。

当查看Google Authenticator要求时,它列出了秘密需要是一个base32编码的字符串。

如果查看TotpSecurityStampBasedTokenProvider中的代码,它将使用用户的SecurityStamp作为由Identity Framework生成的机密。这是GUID,而不是base32编码的字符串。

根据Google Authenticator的规范,有一个要求是秘密是base32编码的字符串。

如何使用TotpSecurityStampBasedTokenProvider与Google Authenticator一起使用?

问题在于Microsoft.AspNet.Identity.Core提供的TotpSecurityStampBasedTokenProvider实现了3分钟的硬编码时间步长。Google Authenticator使用30秒的默认值,根据提供的文档,不能修改

这导致两个TOTP计算生成不同的代码,从而导致总是错误的身份验证。

我已经向aspnet.identity的github存储库添加了一张关于这一点的票证。

因此,现在我除了创建自己的totpProvider 外,没有什么可做的了

TotpSecurityStampBasedTokenProvider使用UserManager.CreateSecurityTokenAsync生成用于计算令牌的密码。

该代码依赖于用户ID,并生成一个字节数组,在TOTP设置阶段,该数组通常在屏幕上显示为base-32或QR码。

长话短说,没什么好担心的。

最新更新