この記事では、モバイルアプリケーションで二要素認証 (2FA) を使用するための手順を説明します。
二要素認証を使用できるようにするには、最初に認証タイプを設定する必要があります。
また、次の点を検討します:
以下で説明されているイベントはすべて同じ
パネルにあります。
このイベント内のロジックには、LoginExternal という名前の
Actions 外部オブジェクトのメソッドの呼び出しが含まれます。
最初のパラメーターは GAMAuthenticationTypes ドメインに基づきます。値は GAMLocal です。
LoginExternal メソッドが True を返す場合、GeneXusSecurity.GAMLoginEvents.TwoFactorAuthenticationRequested イベントがトリガーされます。
このイベントは、サブルーチン「Display2FAStep2」を呼び出してパネルを変更するため、2 つ目の認証要素の入力を表示する準備ができています。加えて、このイベントは 2 つ目の認証要素を確認するようユーザーに警告します。
Event 'BtnNext'
Composite
GeneXus.Common.UI.Progress.ShowWithTitle("Connecting...")
&isLoginOK = GeneXus.SD.Actions.LoginExternal(GAMAuthenticationTypes.GAMLocal, &UserName, &UserPassword, &LoginExternalAdditionalParameters)
GeneXus.Common.UI.Progress.Hide()
If &isLoginOK
//OK
Else
GAMSDGetLastErrors(&Messages)
Endif
EndComposite
Endevent
Event GeneXusSecurity.GAMLoginEvents.TwoFactorAuthenticationRequested
Msg("validate second factor authentication")
Do "Display2FAStep2"
&Login2FAStep = 2
GeneXus.Client.ClientStorage.Set(!'Login2FA-Step', &Login2FAStep.ToString())
GeneXus.Client.ClientStorage.Set(!'Login2FA-UserName', &UserName.Trim())
EndEvent
このイベントでは、外部オブジェクトのメソッド LoginExternal を使用して、2 つ目の認証要素を確認します。このため、&LoginExternalAdditionalParameters.OTPStep プロパティに「2」を定義します。このイベントでは、2 つ目の認証要素の OTP コードを確認するからです。
そのほかに、&password パラメーターを LoginExternal メソッドの &OTPCode に変更します。
Event 'BtnValidCode'
Composite
GeneXus.Common.UI.Progress.ShowWithTitle("Connecting...")
&LoginExternalAdditionalParameters = new()
&LoginExternalAdditionalParameters.AuthenticationTypeName = !"OTP-2FA"
&LoginExternalAdditionalParameters.OTPStep = 2
&LoginExternalAdditionalParameters.UseTwoFactorAuthentication = True
GeneXus.SD.Actions.LoginExternal(GAMAuthenticationTypes.OTP, &UserName, &OTPCode, &LoginExternalAdditionalParameters)
GeneXus.Common.UI.Progress.Hide()
Do "Set2FAStep1"
Return
EndComposite
Endevent
アプリケーションをバックグラウンドで実行している場合、ログインプロセスの状態を維持することが重要です。これは、ユーザーが 1 つ目の認証要素で確認されると、1 つ目の認証要素で既に実行された確認を失わずに、別のアプリを開いて (必要な場合) 2 つ目の認証要素を完了できる必要があることを意味します。
この問題を解決するには、ClientStorage 外部オブジェクトを使用します。
Event ClientStart
&UserName.Enabled = True
&UserPassword.Visible = True
BtnNext.Visible = True
TblCode.Visible = False
&Login2FAStep.FromString(GeneXus.Client.ClientStorage.Get(!'Login2FA-Step'))
If &Login2FAStep = 2
Do "Display2FAStep2"
&UserName = GeneXus.Client.ClientStorage.Get(!'Login2FA-UserName')
Endif
Endevent
このイベントでは、サブルーチン「Set2FAStep1」を呼び出してログインプロセスをキャンセルします。
Event 'BtnBack'
Composite
Do "Set2FAStep1"
Return
EndComposite
Endevent
上記のイベントは、2 つの異なるサブルーチンを呼び出します。
「Display2FAStep2」サブルーチンは、ユーザーが両方の認証要素を操作できるように、パネルのエレメントで変更を行います。
Sub "Display2FAStep2"
&UserName.Enabled = False
&UserPassword.Visible = False
BtnNext.Visible = False
TblCode.Visible = True
EndSub
「Set2FAStep1」サブルーチンは、パネルを既定のままにして、ログインプロセスの手順をリセットします。
Sub "Set2FAStep1"
&Login2FAStep = 1
GeneXus.Client.ClientStorage.Set(!'Login2FA-Step', &Login2FAStep.ToString())
GeneXus.Client.ClientStorage.Set(!'LoginOTP-UserName', "")
EndSub
使用可能バージョン
この機能は GeneXus 17 Upgrade 9 以降で利用できます。