VBA拡張版:取得時にワンタイム認証(2FA)を要求する
ここまでで「パスワードをクラウドやDBに保存し、管理者が必要時に取得できる仕組み」を紹介しました。今回はさらに拡張して、取得時にワンタイム認証(2FA)を要求する仕組みを組み込みます。これにより、パスワード取得をより強固に保護できます。
実現方法の選択肢
- メールによるワンタイムコード送信
- 管理者が取得要求 → システムがランダムコードを生成 → メールで送信
- 管理者はそのコードを入力して認証
- SMSによるワンタイムコード送信
- TwilioなどのSMS APIを利用
- 管理者の携帯にコードを送信
- チャット通知によるワンタイムコード送信
- Slack / Teams / LINE Notify のWebhookを利用
- 管理者がチャットでコードを受け取り、入力して認証
サンプルコード(メールでワンタイムコード送信)
Option Explicit
'=== ワンタイムコード生成 ===
Function GenerateOTP(Optional length As Integer = 6) As String
Dim chars As String, i As Integer, result As String
chars = "0123456789"
Randomize
For i = 1 To length
result = result & Mid(chars, Int(Rnd() * Len(chars)) + 1, 1)
Next i
GenerateOTP = result
End Function
'=== OTP送信(メール) ===
Sub SendOTPEmail(toAddress As String, otpCode As String)
Dim objMsg As Object, objConf As Object
Set objMsg = CreateObject("CDO.Message")
Set objConf = CreateObject("CDO.Configuration")
' SMTP設定(例:Office365)
With objConf.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your_account@domain.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your_password"
.Update
End With
With objMsg
Set .Configuration = objConf
.From = "your_account@domain.com"
.To = toAddress
.Subject = "【認証コード通知】ZIPパスワード取得用OTP"
.HTMLBody = "<html><body><h2>🔑 認証コード</h2><p>以下のコードを入力してください:</p><p><b>" & otpCode & "</b></p></body></html>"
.Send
End With
End Sub
'=== OTP認証フロー ===
Sub OTPAuthentication()
Dim otpCode As String, userInput As String
' ワンタイムコード生成
otpCode = GenerateOTP(6)
' 管理者にメール送信
Call SendOTPEmail("admin@domain.com", otpCode)
' 管理者入力を待機(例:InputBox)
userInput = InputBox("メールで送信された認証コードを入力してください")
If userInput = otpCode Then
MsgBox "認証成功!パスワードを取得できます", vbInformation
' ここでパスワード取得処理を呼び出す
Else
MsgBox "認証失敗!コードが一致しません", vbCritical
End If
End Sub
VBこの拡張版のポイント
- OTP(ワンタイムコード)を生成 → 毎回異なるコード
- メール/SMS/チャットで送信 → 管理者に即時通知
- 入力確認 → コード一致でパスワード取得を許可
実務でのメリット
- セキュリティ強化 → パスワード取得に2FAを必須化
- 不正アクセス防止 → コードが一致しない限り取得不可
- 柔軟性 → メール・SMS・チャットなど複数経路に対応可能
✅ まとめ
- パスワード取得時にワンタイム認証を要求
- OTPを生成してメール/SMS/チャットで通知
- 管理者が正しいコードを入力した場合のみパスワード取得可能


