Использование TotpSecurityStampBasedTokenProvider для TOTP с Google Authenticator - PullRequest
0 голосов
/ 28 ноября 2018

Я реализую 2FA с помощью TOTP на моем веб-сервисе asp.net web api 2 (НЕ .net core).

В реализации используется TotpSecurityStampBasedTokenProvider , предоставленный Microsoft.AspNet.Identity Framework.

При рассмотрении требований Google Authenticator в нем указывается, что секрет должен быть строкой в ​​кодировке base32.

Если вы посмотрите на код из TotpSecurityStampBasedTokenProvider, он использует SecurityStamp пользователякак секрет, который генерируется Identity Framework.Это GUID, а не строка в кодировке base32.

В соответствии со спецификациями для Google Authenticator существует требование, чтобы секрет являлся строкой в ​​кодировке base32.

Как я могу использовать TotpSecurityStampBasedTokenProvider для использования с Google Authenticator?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Проблема в том, что TotpSecurityStampBasedTokenProvider , предоставляемый Microsoft.AspNet.Identity.Core , реализует жестко заданный временной интервал 3 минуты .Google Authenticator использует значение по умолчанию 30 секунд , которое НЕ МОЖЕТ быть изменено в соответствии с документацией при условии .

Это вызывает различные коды длягенерироваться обоими вычислениями TOTP, приводящими к всегда ложной аутентификации.

Я добавил тикет в github-репозиторий aspnet.identity об этом.

Так что сейчасмне ничего не остается, как создать свой собственный totpProvider

0 голосов
/ 28 ноября 2018

TotpSecurityStampBasedTokenProvider использует UserManager.CreateSecurityTokenAsync для генерации секретного кода, который используется для вычисления токена.

Код опирается на идентификатор пользователя и являетсясгенерированный в байтовый массив, который обычно отображается на экране в виде base-32 или QR-кода пользователю на этапе настройки TOTP.

Короче говоря, беспокоиться не о чем.

...