2段階認証について
2段階認証(2 factor authentication)
2段階認証(2 factor authentication)について
https://gist.github.com/asufana/daaa0477df93a5a2870c
https://gist.github.com/asufana/daaa0477df93a5a2870c
二段階認証(TOTP)メモ http://qiita.com/xylitol45@github/items/4f8418554a6550189341
QRコードのURLについて https://github.com/google/google-authenticator/wiki/Key-Uri-Format
Deviseを使っているRailsアプリに2段階認証を導入する http://qiita.com/Kta-M/items/e155f6e35e3e8274ff1e
考慮すること
- リカバリコード
- リカバリコードをDBに保存する
- リカバリコードでもログインできるようにする
- 使用したコードは無効化する
- 再度secret codeを作成してユーザーに提供する(?)
- 時計のズレ
- クライアントとサーバーで時計がずれていくことがあるので、ズレを吸収するためにどの程度ズレが生じているのかをサーバー側に保持しておく。次回以降はそこを起点とする。
ライブラリ
https://github.com/wstrange/GoogleAuth
import com.warrenstrange.googleauth.{GoogleAuthenticator, GoogleAuthenticatorQRGenerator}
/**
* Created by fscoward on 2017/02/01.
*/
object Main {
def main(args: Array[String]): Unit = {
val authenticator = new GoogleAuthenticator()
val credential = authenticator.createCredentials()
// この URL で QR Code を作成して読み込ませる
val url = GoogleAuthenticatorQRGenerator.getOtpAuthTotpURL("fscoward", "otp-sample", credential)
println(s"url: $url")
// QR Code に埋め込まれた secret key
val secretKey = credential.getKey
println(s"credential: ${secretKey}, verificationCode: ${credential.getVerificationCode}, scratchCodes: ${credential.getScratchCodes}")
// val totpPassword = authenticator.getTotpPassword(secretKey)
// println(s"totpPassword: $totpPassword")
// QRコードで読み込ませたときの secret key
val storedSecretKey = "JW6W56PKJJFDTRX6"
println(s"${authenticator.getTotpPassword(storedSecretKey)}")
}
}
- base32の秘密鍵を作成
- QRコードでクライアントに秘密鍵を渡す
- クライアントはGoogle Authenticatorを用いて生成
- サーバーもsecret keyを用いてtotppasswordを生成
Getting Started With Oauth 2.0
- 作者: Ryan Boyd
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2012/02/29
- メディア: ペーパーバック
- クリック: 4回
- この商品を含むブログを見る