| 4D v18On REST Authentication データベースメソッド | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
    4D v18
 On REST Authentication データベースメソッド 
         | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| $1, $2, $3, $4 -> On REST Authentication データベースメソッド -> 戻り値 | ||||||||
| 引数 | 型 | 説明 | ||||||
| $1 | テキスト |   | ユーザー名 | |||||
| $2 | テキスト |   | パスワード | |||||
| $3 | ブール |   | True = ダイジェストモード False = ベーシックモード | |||||
| $4 | テキスト |   | 呼び出し元のIPアドレス | |||||
| 戻り値 | ブール |   | True = セッション開始を許可、False = セッション開始を拒否 | |||||
On REST Authentication データベースメソッド は 4D 上で REST セッションの開始を管理するための方法を提供します。Open datastore コマンドによってリモートデータストアの新規セッションが開始される際、このデータベースメソッドは自動的に呼び出されます。
REST セッション開始のリクエストを受信すると、そのリクエストヘッダーには接続の識別子が含まれています。これらの識別子を評価するために On REST Authentication データベースメソッド は呼び出されます。評価にあたっては 4D データベースのユーザーリストを使用することもできますし、独自の識別子のテーブルを使用することもできます。
重要: On REST Authentication データベースメソッド が定義される (つまり中に一文字でもコードが記述される) と、4D は REST リクエストの管理をそちらに一任します。このとき、データベース設定のWeb/Rest リソースページ内の「読み込み/書き出し」メニューで設定した内容は無視されます。
このデータベースメソッドは3つのテキスト型の引数($1, $2 と $4)と1つのブール型の引数($3)を4Dから受け取り、ブール型の戻り値 $0 を返します。これらのパラメーターは以下の様に宣言されている必要があります:
  //On 4D Mobile Authentication データベースメソッド
 C_TEXT($1;$2;$4)
 C_BOOLEAN($0;$3)
 ... // メソッドのコード$1 には接続に使用したユーザー名が入り、 $2 にはパスワードが入ります。
リクエストが使用しているモードによって、パスワード ($2) は標準テキストまたはハッシュ値で取得されます。場合に応じた処理を行うため、この使用モードは $3 引数で確認できます:
Open datastore コマンドによって送信された REST 接続リクエストの場合、パスワードは必ずハッシュ値で送られてきます。
呼び出し元の IP アドレス ($4) は、特定の IP アドレスをフィルターしたい場合などに便利です。
REST 接続の識別子は本データベースメソッド内でチェックされなければなりません。通常は、独自のユーザーテーブルを用いて、ユーザー名とパスワードを確認します。識別子が有効であれば、$0 にTrue を返します。すると、リクエストが受理され、4Dはセッションを開いてJSON形式の結果を返します。
それ以外の場合は $0 に False を返します。この場合、接続は拒否され、サーバーはリクエスト元に認証エラーを返します。
ユーザーが、データベースの4Dユーザーリストに載っている場合には、以下のようにパスワードを直接チェックすることができます:
 $0:=Validate password($1;$2;$3)Validate password コマンドの第一引数にはユーザー名、第二引数にはパスワードを受け渡し、任意の第三引数にはそのパスワードがハッシュ形式かどうかを指定します。
4D ユーザーリストとは別の独自のユーザーリストを使用する場合、パスワードをハッシュ形式で保存するにあたっては、4D が On REST Authentication データベースメソッド (の$2) に接続リクエストを送る際に使用しているのと同じアルゴリズムを使うことができます。この方法でパスワードをハッシュ化するには、次のように記述します:
 $HashedPasswd:=Generate digest($ClearPasswd ;4D digest)Generate digest コマンドはハッシュアルゴリズムとして 4D digest を受け入れます。これは4D内部のパスワード管理で使用されているのと同じ方法です。
この例題では、4Dユーザーとは合致しない "admin" ユーザーとパスワード "123" の組み合わせのみ受け入れます:
  //On REST Authentication データベースメソッド
 C_TEXT($1;$2)
 C_BOOLEAN($0;$3)
  //$1: ユーザー名
  //$2: パスワード
  //$3: Digestモード
 If($1="admin")
    If($3)
       $0:=($2=Generate digest("123";4D digest))
    Else
       $0:=($2="123")
    End if
 Else
    $0:=False
 End ifこの例題では特定の IP を拒否します (なおパスワードは 4D のDigestアルゴリズムによってハッシュ化され、Users データクラスに保存されています):
  // On REST Authentication データベースメソッド
 C_TEXT($1;$name;$2;$password)
 C_TEXT($4;$ip)
 C_BOOLEAN($0;$result;$3;$digest)
 C_OBJECT($user)
 
 $name:=$1
 $password:=$2
 $digest:=$3
 $ip:=$4
 
 $result:=False
 
 If($ip#"123.45.67.89") // 接続拒否する IP
    $user:=ds.Users.query("name=:1";$name).first()
  // パスワードは 4D のDigestアルゴリズムによってハッシュ化され、Users データクラスに保存されています
    If($user#Null)
       If($digest  & ($user.password=$password))
          $result:=True
       End if
    End if
 End if
 
 $0:=$resultこの例題では 4D ユーザーの照合も行います:
  // On REST Authentication データベースメソッド
 C_TEXT($1;$name;$2;$password)
 C_BOOLEAN($0;$result;$3;$digest)
 C_OBJECT($user)
 
 $name:=$1
 $password:=$2
 $digest:=$3
 
 $result:=False
 
 $user:=ds.Users.query("name=:1";$name).first()
  // パスワードはハッシュ化されて Users データクラスに保存されています
 If($user#Null)
    If($digest  & ($user.password=$password))
       $result:=True
    End If
 Else // 4D ユーザーの照合
    $result:=Validate password($name;$password;$digest)
 End If
 $0:=$result
	プロダクト: 4D
	テーマ: データベースメソッド
	番号: 
        3367
        
        
        
	

	初出: 4D v14
	名称変更: 4D v14 R3
	変更: 4D v18
	名称変更: 4D v18
	ランゲージリファレンス ( 4D v18)
	
	
	
 コメントを追加
コメントを追加