Web 認証用の SMS OTP の設定
NetScalerをサードパーティのSMSプロバイダーと統合して、追加の認証レイヤーを提供できるようになりました。
NetScalerアプライアンスは、認証の第2要素としてユーザーのモバイルでOTPを送信するように構成できます。アプライアンスは、AD ログインの成功後に OTP に入るためのログオンフォームをユーザーに提示します。SMS OTP 認証が正常に検証されて初めて、要求されたリソースがユーザーに提示されます。
SMS OTP認証を実現するために、NetScalerアプライアンスはバックエンドの次の要素に依存しています。
- LDAP認証を使用してユーザーを認証し、ユーザーの携帯電話番号を抽出します。
- OTP を作成し、NS 変数に格納します。変数の設定と使用。
- LDAP から抽出した携帯電話番号に WebAuth 認証方式で OTP を送信します。
- OTP を検証します。
前提条件
OTP ストアを構成する
管理者は、次のCLIコマンドを使用して、SMS認証に使用されるOTPを保存するデータベース/ストアを設定します。
add ns variable otp_store -type "map(text(65),text(6),100000)" -ifValueTooBig undef -ifNoValue undef -expires 5
<!--NeedCopy-->
ユーザーセッションごとにランダムOTPを生成
次のコマンドを使用して、ユーザーセッションごとに6桁のランダムOTPを生成し、OTPストアに保存します。
add ns assignment generate_otp -variable "$otp_store[AAA.USER.SESSIONID]" -set ("000000" + SYS.RANDOM.MUL(1000000).TYPECAST_UNSIGNED_LONG_AT.TYPECAST_TEXT_T).SUFFIX(6)
<!--NeedCopy-->
NetScalerでSMS OTP認証を構成する
-
SMS二要素認証機能を構成する前に、NetScalerアプライアンスで認証を有効にした第1要素としてLDAP認証を構成する必要があります。LDAP 認証を設定する手順については、「 構成ユーティリティを使用して LDAP 認証を構成するには」を参照してください。
-
LDAP を設定し、SMS OTP 認証に使用する携帯電話番号を抽出します。
第 1 要素構成のサンプル
add authentication ldapAction ldap_action -serverIP 1.1.1.1 -serverPort 3268 -authTimeout 30 -ldapBase "dc=nsi-test,dc=com" -ldapBindDn Administrator@nsi-test.com -ldapBindDnPassword freebsd -ldapLoginName samaccountname -groupAttrName memberOf -ssoNameAttribute samaccountname -Attribute1 mobile -email mail
add authentication Policy ldap_policy -rule true -action ldap_action
<!--NeedCopy-->
注
携帯電話番号は AAA.USER.ATTRIBUTE (1) を使用して抽出でき、バックエンドサーバーに送信するときに含めることができます。
第 2 要素構成のサンプル
次のサンプル設定を使用して、エンドユーザーに送信される OTP が生成されます。
add authentication policylabel set_otp -loginSchema LSCHEMA_INT
add authentication Policy set_otp -rule true -action test
add authentication policy cascade_noauth -rule true -action NO_AUTHN
add authentication Policy check_otp -rule "$test.valueExists(AAA.USER.SESSIONID)" -action NO_AUTHN
add authentication policylabel check_otp -loginSchema LSCHEMA_INTbind authentication policylabel set_otp -policyName set_otp -priority 1 -gotoPriorityExpression NEXT
bind authentication policylabel set_otp -policyName cascade_noauth -priority 2 -gotoPriorityExpression NEXT -nextFactor check_otpbind authentication policylabel check_otp -policyName wpp -priority 1 -gotoPriorityExpression NEXT
bind authentication policylabel check_otp -policyName wpp_cascade_noauth -priority 2 -gotoPriorityExpression NEXT -nextFactor otp_verifyadd authentication Policy wpp -rule true -action webAuth_POST
add authentication Policy wpp_cascade_noauth -rule true -action NO_AUTHNadd authentication Policy otp_verify -rule "AAA.LOGIN.PASSWORD.EQ($test[AAA.USER.SESSIONID])" -action NO_AUTHN
add authentication policylabel otp_verify -loginSchema onlyPassword
bind authentication policylabel otp_verify -policyName otp_verify -priority 1 -gotoPriorityExpression NEXTadd authentication vserver avs SSL 10.106.40.121 443
bind authentication vserver avs -policy ldap_policy -priority 1 -nextFactor set_otp -gotoPriorityExpression NEXT
<!--NeedCopy-->
第 3 要素構成の例
次のサンプル構成を使用して、第 2 要素構成で生成された OTP が Web 認証方法を使用してエンドユーザーに送信されます。Web 認証の詳細については、 Web 認証を参照してください。
-
SMS サーバーが GET メソッドを介して API を公開する場合の Web 認証設定の例。
add policy expression otp_exp_get ""method=sendMessage&send_to=" + AAA.USER.ATTRIBUTE(1) + "&msg=OTP is " + $otp_store[AAA.USER.SESSIONID] + "for login into secure access gateway. Valid till EXPIRE_TIME. Do not share the OTP with anyone for security reasons.&userid=#####&password=###=1.0"" add authentication webAuthAction webAuth_Get -serverIP 10.106.168.210 -serverPort 8080 -fullReqExpr q{"GET /GatewayAPI/rest?" + otp_exp_get + "HTTP/" + http.req.version.major + "." + http.req.version.minor.sub(1) + "\r\nAccept:\*/\*\r\nHost: <FQDN>\r\n"} -successRule "http.res.status.eq(200)" -scheme http <!--NeedCopy-->
-
SMS サーバーが GET メソッドを介して API を公開する場合の Web 認証設定の例。
add policy expression otp_exp_post ""Message: OTP is " + $otp_store[AAA.USER.SESSIONID] + "for login into secure access gateway. Valid till EXPIRE_TIME. Do not share the OTP with anyone for security reasons&Mobile:" + AAA.USER.ATTRIBUTE(1)" add authentication webAuthAction webAuth_POST -serverIP 10.106.168.210 -serverPort 8080 -fullReqExpr q{"POST /MyPHP/auth.php HTTP/" + http.req.version.major + "." + http.req.version.major + "\r\nAccept:\*/\*\r\nHost: 10.106.168.210 \r\nContent-Length: 10\r\n\r\n" + otp_exp_post} -scheme http -successRule true <!--NeedCopy-->
add authentication webAuthAction webAuth_Get -serverIP 10.106.168.210 -serverPort 8080 -fullReqExpr q{"GET /GatewayAPI/rest?" + otp_exp_get + "HTTP/" + http.req.version.major + "." + http.req.version.minor.sub(1) + "\r\nAccept:/\r\nHost: <FQDN>\r\n"} -successRule "http.res.status.eq(200)" -scheme http add policy expression otp_exp_post "$otp_store[AAA.USER.SESSIONID]" <!--NeedCopy-->
-
最後に、OTP を送信します。
add authentication Policy wpp -rule true -action webAuth_POST add authentication policylabel send_otp -loginSchema LSCHEMA_INT bind authentication policylabel send_otp -policyName wpp -priority 1 -gotoPriorityExpression NEXT <!--NeedCopy-->
第 4 の要素構成の例
次のサンプル設定を使用して、エンドユーザーに送信された OTP を検証します。
この構成では、ポリシールールを使用して、エンドユーザーに送信されるOTPに対してOTPを検証します。
add authentication Policy otp_verify -rule "AAA.LOGIN.PASSWORD.EQ($otp_store[AAA.USER.SESSIONID])" -action NO_AUTHN
add authentication policylabel otp_verify -loginSchema onlyPassword
bind authentication policylabel otp_verify -policyName otp_verify -priority 1 -gotoPriorityExpression NEXT
<!--NeedCopy-->
次のコマンドを使用して、OnlyPassword ログインスキーマを追加します。
add authentication loginSchema onlypassword -authenticationschema /nsconfig/loginschema/LoginSchema/OnlyPassword.xml"
<!--NeedCopy-->
SMS OTP認証を成功させるためのすべての要素をリンクする
次の CLI コマンドを使用して、すべての要素をリンクします。
bind authentication policylabel send_otp -policyName wpp -priority 1 -gotoPriorityExpression NEXT -nextFactor otp_verify
<!--NeedCopy-->
注:
カスケード認証のポリシーが追加され、エンドユーザーの信頼性が高く継続的な認証が可能になります。現在の要因が失敗した場合、ユーザーエクスペリエンスに影響がないように次の要素が評価されます。