スクリプトの制御下にあるデータベースまたはパスワード リストに対して HTTP 認証を使用する ASP クラシックで Web サイトを開発したいと考えています。理想的には、スクリプトはホストされた環境で実行できる必要があるため、ソリューションにコンポーネントや IIS 設定が含まれないようにする必要があります。
手がかり/コードを深く感謝します。
スクリプトの制御下にあるデータベースまたはパスワード リストに対して HTTP 認証を使用する ASP クラシックで Web サイトを開発したいと考えています。理想的には、スクリプトはホストされた環境で実行できる必要があるため、ソリューションにコンポーネントや IIS 設定が含まれないようにする必要があります。
手がかり/コードを深く感謝します。
ピュア クラシック ASP VBScript で HTTP 基本認証を行うことができます。
Base 64 をデコードするには何かが必要です。これは純粋な VBScript の実装です。また、IIS 構成で「基本認証」と「統合 Windows 認証」をオフにする必要があります。これらは、HTTP_AUTHORIZATION ヘッダーに返される内容に干渉するためです。
ユーザー名とパスワードをエコー バックするだけの実装例を次に示します。
<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="decbase64.asp" -->
<%
Sub Unauth()
Call Response.AddHeader("WWW-Authenticate", "Basic realm=""SomethingGoesHere""")
Response.Status = "401 Unauthorized"
Call Response.End()
End Sub
Dim strAuth
strAuth = Request.ServerVariables("HTTP_AUTHORIZATION")
If IsNull(strAuth) Or IsEmpty(strAuth) Or strAuth = "" Then
Call Unauth
Else
%>
<html>
<body>
<%
Dim aParts, aCredentials, strType, strBase64, strPlain, strUser, strPassword
aParts = Split(strAuth, " ")
If aParts(0) <> "Basic" Then
Call Unauth
End If
strPlain = Base64Decode(aParts(1))
aCredentials = Split(strPlain, ":")
%>
<%= Server.HTMLEncode(aCredentials(0) & " - " & aCredentials(1)) %>
</body>
</html>
<%
End If
%>
ユーザー名とパスワードを意味のあるものにフックすることは、読者の課題として残されています。
定義上、HTTP 認証は Web サーバーによって要求されるものです。IIS 設定が適用されないという結果にならない解決策が見つかるとは思えません。
Web ブラウザーは Web サイトに接続し、サーバーが HTTP 応答コード HTTP/1.1 401 Unauthorized で応答しない限り、ブラウズは資格情報を通過しません。
401 の応答コードを強制的に試して、ヘッダーを設定することができます
WWW-Authenticate: Basic realm="SomethingGoesHere"
次に、ブラウザーはユーザーにユーザー名とパスワードの入力を求めますが、次のようにクリアテキスト (base64 エンコード) でブラウザーに送信されます。
Authorization: Basic YnJpYW5iOmJvYmJ5Ym95
Base64 から次のように変換されます。
brianb:bobbyboy
ASP ページから Authorization ヘッダーにアクセスできるようになるのか、それとも予期しないときに誰かが資格情報を渡そうとするために Web サーバーが異常終了するのかはわかりませんが、試す...
こんにちは、データベースからユーザーのリストを取得しようとしていますか、それとも HTTP サーバーでネットワーク ベースのアクセス許可を使用しようとしていますか?
データベースを使用している場合は、ODBC と DSN を使用します
Dim DatabaseObject1
Set DatabaseObject1 = Server.CreateObject("ADODB.Connection")
DatabaseObject1.Open("DSN=DSNname;")
(サーバーからの) パスワード ダイアログ ボックスが必要な場合は、IIS 設定を変更して適切なガイドにする必要があります。