On Web AuthenticationでUser, Passwordが空

お世話になります。

4D Sever v17.3を使ってWEBからのアクセスのテストを行なっています。

ストラクチャー設定 - Web(クライアント)画面のオプション(I)で

webパスワード
BASIC認証のパスワード → 選択
4Dパスワードを含む → オフ
一般Webユーザー:

と設定しています。

サーバーと同じマシン(Mac mini macOS 10.14.6)からSafariでhttp://localhost:8080/4DACTION/Testへアクセスするとデータベースメソッドの「On Web Authentication」が一度呼ばれて、その後にブラウザー上にBASIC認証の画面が表示されます。そこでユーザー名とパスワードを入力すると、再度データベースメソッドの「On Web Authentication」が呼ばれるのですが、その時のパラメータ$5および$6が空の文字列になっているため認証処理を行うことができません。

データベースメソッド
On Web Authentication
$0: True
$1: “/4DACTION/…”
$2: “Get /…”
$3: “::1”
$4: “::1”
$5: “”
$6: “”

Google ChromeからアクセスしたりiPhoneのSafariからアクセスしてみても$5, $6は空のままです。

DIGEST認証を行った場合も$5は空文字列でした。4D ServerやMac自体の再起動を行なっても変化がありませんでした。
何か他に設定が必要なのでしょうか?

#ちなみにWEB用ライセンスは購入済みで認証を使わない場合はWEBからアクセスすることはできています。

はじめに,4DのWebサーバーは,⑴ サーバーを公開する,⑵ サーバーに接続したクライアントを公開する,という運用形態があり,データベース設定の「Web(クライアント)」は,後者に適用されるものであることに留意なさってください。「サーバーと同じマシンで接続・・・」とのことですが,この場合の「サーバー」が「HTTPサーバーとして公開中のクライアント」でななく,4D Serverのことであれば,4D Server側でデータベース設定画面を開き,「Web(サーバー)」を設定する必要があります。あるいは,スタンドアロン版の4Dで設定することもできます。

データベース設定の「Webパスワード」を設定した場合の処理についてですが,基本的な流れは下記のようになります。

リクエストしたURLに対応するリソース(ファイル)がWebフォルダー内に存在する場合:

データベースメソッドはコールされず,ディスクあるいはWebキャッシュからファイルが配信されます。CSS・JS・画像などのスタティックコンテンツは,この方法で配信します。

リクエストしたURLに対応するリソース(ファイル)がWebフォルダー内に存在しない場合:

On Web Authenticationがコールされます。$1(デフォルトはTrue)にFalseを代入すれば,「認証が必要」のHTTPコードが送信され,相手がブラウザであれば,自動的にパスワード入力の画面が表示されます。なお,ほとんどのブラウザは,「認証が必要」のHTTPコードを受信すると,過去にユーザーが入力したHTTP標準のパスワードを自動的に送信するようになっています。

HTTP標準のパスワードではなく,password属性のフォーム送信でログインが実装されている場合,つまり,ブラウザ標準のログイン画面ではなく,独自にデザインされたログイン画面を使用している場合,パスワードはWebフォーム変数として送信されます。

ユーザー名とパスワードをパスワード画面に入力して送信すると,再びOn Web Authenticationがコールされます。$5にはユーザー名が代入されていますが,DIGESTモードの場合,$6は常に空であり,直接,パスワードを照会することはできません。この点はドキュメントに説明されています。

https://doc.4d.com/4Dv17/4D/17.3/On-Web-Authentication-database-method.301-4620899.ja.html

DIGESTモードの場合,ブラウザは,パスワードそのものではなく,そのハッシュ値(チェックサムのようなもの)を送信します。ハッシュ値をチェックするには,下記のコマンドを使用します。

$allow:=WEB Validate digest(“user”;“pass”)

https://doc.4d.com/4Dv17/4D/17.3/Generate-digest.301-4620818.ja.html

On Web Authenticationの$0にTrueが返されると,続けてOn Web Connectionがコールされます(厳密には,On Web Authenticationよりも前に,Compiler_Webがコールされます。Compiler_Webは,かつてWebフォーム変数を同名の4Dプロセス変数に代入する仕組みのために使用されていましたが,現バージョンではWEB GET VARIABLESで同等がことが実現できるため,フォーム変数の自動代入はデフォルトでオフになっています。)

https://doc.4d.com/4Dv17/4D/17.3/Compatibility-page.300-4639726.ja.html
https://doc.4d.com/4Dv17/4D/17.3/WEB-GET-VARIABLES.301-4620589.ja.html

On Web Authentication$5と$6にユーザー名とパスワードが代入されるのは,DIGEST(推奨)ではなく,BASICモード(非推奨)が選択されており,かつ,「4Dパスワードを含む」が有効にされていない場合だけです。その場合,単純なクエリ等でユーザーを認証します。前述したように,データベース設定画面はHTTPサーバーを公開するアプリケーション(4D Serverまたは4D)で開く必要があります。

BASICモード(非推奨)が選択されており,かつ,「4Dパスワードを含む」が有効にされている場合,認証はOn Web Authenticationがコールされる前,4Dが自動的に処理します。つまり,On Web Authenticationがコールされている時点で認証はすでに完了しています。

まとめ

4D ServerをHTTPサーバーとして公開するのであれば,4D Server側でデータベース設定画面を開き,「Web(サーバー)」を設定する

「DIGESTモード」の場合,認証は$6ではなく,WEB Validate digestで処理する

$5と$6を使用するのは「BASICモード(4Dユーザーを含めない)」の場合

返事が遅くなり大変申し訳ありませんでした。

丁寧な説明をありがとうございました。
もう一度設定を見直しながら試行錯誤した結果、ダイジェストモードで認証できるようになりました。
ありがとうございました。