代码之家  ›  专栏  ›  技术社区  ›  Peter

通过Google Authenticator为TOTP使用TotpSecurityStampBasedTokenProvider

  •  1
  • Peter  · 技术社区  · 6 年前

    实现使用 TotpSecurityStampBasedTokenProvider 由Microsoft.AspNet.Identity framework提供。

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

    如果查看TotpSecurityStampBasedTokenProvider中的代码,它将用户的SecurityStamp用作身份框架生成的机密。这是GUID,不是base32编码的字符串。

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

    2 回复  |  直到 6 年前
        1
  •  2
  •   Patrick Hofman Wahid Bitar    6 年前

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

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

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

        2
  •  1
  •   Peter    6 年前

    问题是 TotpSecurityStampBasedTokenProvider 提供人 Microsoft.AspNet.Identity.Core 实现的硬编码时间步 3分钟 . Google Authenticator使用默认值 ,其中 不能修改 provided .

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

    我已经把一张票加到票上了 github repository of aspnet.identity 关于这个。