Go言語 ポートフォリオ

【Go言語】ワンタイムパスワードを生成しメールで通知する方法【2要素認証】

Go言語ワンタイムパスワード

こんにちは洸です!今回は、Go言語でワンタイムパスワードを発行し、メールで送信したいと思います。
 
 
通常、ログイン画面でユーザIDとパスワードの認証だけでは、ブルーフォースアタック(総攻撃)などによって容易に不正アクセスされてしまいます。そこで、SMSやメールアドレスでワンタイムパスワードを通知し、2つの要素で認証を行います。(2要素認証)
 
 

こちらの記事のように、直接計算式を記述してもよいですが、今回は便利なpquerna/otpパッケージを使います。

インストール

まずは、go getコマンドでpquerna/otpパッケージのインストールを行います。

ワンタイムパスワード生成

インストールが完了したら、exampleを参考にワンタイムパスワードの発行処理を作成します。

IssuerとAccountNameに任意の値を代入し、シークレットキーをランダム生成します。次に、作成されたシークレットキーから、SHA-1アルゴリズムでワンタイムパスワードを生成します。
 
 
生成したパスワードはメールで送信し、ユーザの入力を待ちます。 シークレットキーは検証で使用するので、戻り値で保持しておきます。

メール送信

パスワードを通知するための、メール送信を行います。

検証 

次に、ワンタイムパスワードの検証です。

ユーザの入力値とシークレットキーで検証を行います。検証に用いるアルゴリズムは、パスワード生成したものと同じSHA-1を用います。

メイン処理

最後に全体の処理を記述して完了です。

やってみよう

go run で実行します。

IssueTotp()が成功すると、メールでワンタイムパスワードが送られ、入力を促されます。

ワンタイムパスワードメール画面

メールにあるパスワードを入力します。

無事認証成功です。お疲れ様でした!
 
 
おすすめのメールの記事はこちら

参考【知っとくとお得◎】メール設定で今後困らない知識を5分で理解する

OutlookやiPhoneでメールアカウントを追加したい時、SMTP、POP3、IMAP、SSLなどの言葉が出てきます。数年間意味が分からないまま、無心で設定を行っていました(笑)が、いざ勉強してみると簡単じゃん!!ということで、忘備録もかねて、メールの設定項目と仕組み・流れを簡単に説明していきたいと思います。

続きを見る

-Go言語, ポートフォリオ
-

© 2022 まいふぁんず