Citrix ADC

Web 認証を使用した SMS OTP 認証

Citrix ADCをサードパーティのSMSプロバイダーと統合して、追加の認証レイヤーを提供できるようになりました。

Citrix ADCアプライアンスは、認証の第2要素としてユーザーのモバイルでOTPを送信するように構成できます。アプライアンスは、AD ログインの成功後に OTP に入るためのログオンフォームをユーザーに提示します。SMS OTP 認証が正常に検証されて初めて、要求されたリソースがユーザーに提示されます。

SMS OTP認証を実現するために、Citrix ADCアプライアンスはバックエンドの次の要素に依存しています。

  1. LDAP認証を使用してユーザーを認証し、ユーザーの携帯電話番号を抽出します。
  2. OTP を作成し、NS 変数に格納します。変数の設定と使用
  3. LDAP から抽出した携帯電話番号に WebAuth 認証方式で OTP を送信します。
  4. 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-->

Citrix ADCでSMS OTP認証を構成する

  • SMS二要素認証機能を構成する前に、Citrix ADCアプライアンスで認証を有効にした第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 Policy set_otp -rule true -action generate_otp

add authentication policylabel set_otp -loginSchema LSCHEMA_INT

add authentication policy cascade_noauth -rule true -action NO_AUTHN

bind authentication policylabel set_otp -policyName set_otp -priority 1 -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-->

注:

カスケード認証のポリシーが追加され、エンドユーザーの信頼性が高く継続的な認証が可能になります。現在の要因が失敗した場合、ユーザーエクスペリエンスに影響がないように次の要素が評価されます。

Web 認証を使用した SMS OTP 認証