-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2段階認証のバックアップコード #3566
Comments
Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 9.2.7 to 9.2.8. - [Release notes](https://github.com/TypeStrong/ts-loader/releases) - [Changelog](https://github.com/TypeStrong/ts-loader/blob/main/CHANGELOG.md) - [Commits](TypeStrong/ts-loader@v9.2.7...v9.2.8) --- updated-dependencies: - dependency-name: ts-loader dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
これ必要になってきたかも |
というかMUSTなやつでは? |
これをシード値として生成して、あってるか確認する程度ならすぐできるかも |
バックアップコードについての詳細求 |
two factor authentication backup codes で調べたけど詳細な情報が見つけられなかった |
createdAtの+0分〜+n分までのステップでも許可するとか? |
実装の案としては
|
🙏🙏🙏 |
なんか難しそう |
不可逆でない状態でパスワードを複数持つようなものなので別に難しく考える必要はない |
(というか不可逆でもいい) |
面倒だったらOTPのSecretに使う値以外にOTPAuth.Secretを8回呼び出してそれをそのままバックアップコードにしてもいいかも |
例えば(擬似コード) fn on_enable(id: user.id) {
let user = await(tables.users.get_row(id));
let salt = user.salt;
let mut codes = vec();
for (let mut i = 0..8) {
let code = crypto.generate_secure_password_string();
let hash = hasher.hash(code, salt);
codes.append(code);
await(tables.backup_codes.add_row(BackupCode {
id: auto(),
user_id: id,
hash: hash,
}));
}
client.display.show(codes);
}
fn on_disable(id: user.id) {
await(tables.backup_codes.find_to_delete_row_bulk(BackupCodeFinder {
user_id: id,
}));
}
fn on_reset(id: user.id, code: string) -> Result<()> {
// FIXME: add rate limit
let user = await(tables.users.get_row(id));
let salt = user.salt;
let hash = hasher.hash(code, salt);
let matched = await(tables.backup_codes.find_to_delete_row(BackupCodeFinder {
user_id: id,
hash: hash,
}));
if matched {
let remaining = await(tables.backup_codes.count(BackupCodeFinder {
user_id: id,
}));
if remaining == 0 {
client.display.show("all of your backup codes are no longer available\nyou should reset 2FA immediately");
}
return Ok();
} else {
// FIXME: add rate limit
return Err("invalid code");
}
} |
シークレットをUserProfileに突っ込んでるだけだったので使えない感() |
Secretが生で突っ込んでるんだし…
みたいにしちゃって良さそうな気がしてきた |
GoogleやDiscordも不可逆で保存はしてないので生で保存して問題ないと思います |
|
ioの実装 |
持ってくるか |
Summary
万が一認証コードを搭載した端末を無くしてしまった場合にバックアップコードを発行する仕組みを作ったほうが良いと思った。
Environment
Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.
The text was updated successfully, but these errors were encountered: