IISを介したASP ClassicのHTTP認証(基本またはダイジェスト)[終了]
-
03-07-2019 - |
質問
スクリプトの制御下にあるデータベースまたはパスワードリストに対して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認証はWebServerによって要求されるものです。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の設定を変更して、これに関する適切なガイドを作成する必要があります。