Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » Mobile Link - クライアント管理 » Mobile Link クライアントの紹介 » Mobile Link ユーザ » カスタム・ユーザ認証

 

外部サーバに対する認証

Mobile Link には、authenticate_user イベントを使用して外部サーバに対する認証を簡単に行えるようにする、事前に定義された Java 同期スクリプトが用意されています。事前に定義されたスクリプトは、次の認証サーバで使用できます。

  • JavaMail 1.2 API を使用している POP3 または IMAP サーバ

  • Java Naming と Directory Interface (JNDI) を使用している LDAP サーバ

これらのスクリプトをどのように使用するかは、Mobile Link ユーザ名を外部認証システムのユーザ ID に直接マッピングしているかどうかによって決まります。

注意

Sybase Central モデル・モードで [認証] タブを使用して外部サーバへの認証を設定することもできます。Mobile Link のモデルを参照してください。

Mobile Link ユーザ名をユーザ ID に直接マッピングしている場合

Mobile Link ユーザ名を認証システムの有効なユーザ ID に直接マッピングしている単純なケースでは、authenticate_user 接続イベントに対する応答で、定義済みのスクリプトを直接使用できます。認証コードは、ml_property テーブルに格納されているプロパティに基づいてそのコード自体を初期化します。

♦  事前に定義されたスクリプトを authenticate_user で直接使用するには、次の手順に従います。
  1. 事前に定義された Java 同期スクリプトを Mobile Link の ml_scripts システム・テーブルに追加します。追加するには、ストアド・プロシージャを使用するか、Sybase Central を使用します。

    • ml_add_java_connection_script ストアド・プロシージャを使用するには、次のコマンドを実行します。

      call ml_add_java_connection_script(
        'MyVersion',
        'authenticate_user',
        'ianywhere.ml.authentication.ServerType.authenticate' )

      ここで、MyVersion はスクリプト・バージョンの名前で、ServerTypeLDAPPOP3、または IMAP です。

    • Sybase Central の接続スクリプト追加ウィザードを使用するには、スクリプト・タイプとして authenticate_user を選択し、コード・エディタで次のコードを入力します。

      ianywhere.ml.authentication.ServerType.authenticate

      ここで、ServerTypeLDAPPOP3、または IMAP です。

      ml_add_java_connection_script システム・プロシージャを参照してください。

  2. この認証サーバのプロパティを追加します。

    設定が必要な各プロパティに対し、ml_add_property ストアド・プロシージャを使用します。

    call ml_add_property(
      'ScriptVersion',
      'MyVersion',
      'property_name',
      'property_value' )

    ここで、MyVersion はスクリプト・バージョンの名前で、property_name は認証サーバによって決まります。また、property_value は使用しているアプリケーションに適切な値です。この呼び出しを、設定の必要な各プロパティに対して繰り返し行います。

    外部認証識別符号プロパティml_add_property システム・プロシージャを参照してください。

Mobile Link ユーザ名をユーザ ID に直接マッピングしていない場合

Mobile Link ユーザ名がユーザ ID と同じでない場合は、コードを間接的に呼び出す必要があり、ユーザ ID を ml_user 値から抽出するか、マッピングしなければなりません。これを行うには、Java クラスを作成します。

Java による同期スクリプトの作成を参照してください。

次に、簡単な例を示します。extractUserID メソッド内のコードは、ml_user 値をユーザ ID にマッピングする方法によって異なるため、この例では省きます。すべての作業は、認証クラスの "authenticate" メソッドで行われます。

package com.mycompany.mycode;

import ianywhere.ml.authentication.*;
import ianywhere.ml.script.*;

public class MLEvents
{
    private DBConnectionContext _context;
    private POP3 _pop3;

    public MLEvents( DBConnectionContext context )
    {
        _context = context;
        _pop3 = new POP3( context );
    }

    public void authenticateUser(
      InOutInteger status,
      String userID,
      String password,
      String newPassword )
    {
        String realUserID = extractUserID( userID );
        _pop3.authenticate( status, realUserID, password, newPassword );
    }

    private String extractUserID( String userID )
    {
        // code here to map ml_user to a "real" POP3 user
    }
}

この例では、初期化プロパティを検出できるようにするために、POP3 オブジェクトを DBConnectContext オブジェクトで初期化する必要があります。この方法でオブジェクトを初期化しない場合は、コードにプロパティを設定する必要があります。次に例を示します。

POP3 pop3 = new POP3();
pop3.setServerName( "smtp.sybase.com" );
pop3.setServerPort( 25 );

これはどのような認証クラスにも適用されますが、プロパティはクラスによって異なります。


外部認証識別符号プロパティ