مصادقة HTTP (Basic أو Digest) في ASP Classic عبر IIS [مغلق
-
03-07-2019 - |
سؤال
أرغب في تطوير موقع ويب في ASP Classic يستخدم مصادقة HTTP مقابل قاعدة بيانات أو قائمة كلمات المرور تحت عنصر تحكم البرنامج النصي. من الناحية المثالية ، يجب ألا يتضمن الحل أي مكونات أو إعدادات IIS حيث يجب تشغيل البرنامج النصي في بيئة مستضافة.
أي أدلة/رمز موضع تقدير عميق.
المحلول
من الممكن القيام بمصادقة HTTP الأساسية في ASP VBScript Pure Classic.
ستحتاج إلى شيء لفك تشفير قاعدة 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 هي شيء يطلبه خادم الويب ، وأشك في أنك ستجد حلًا لا يؤدي إلى تطبيق أي إعدادات IIS.
سيتصل متصفح الويب بموقع الويب الخاص بك ، وما لم يستجيب الخادم الخاص بك برمز استجابة HTTP HTTP/1.1 401 غير مصرح به ، فلن يمر Browse عبر بيانات الاعتماد.
يمكنك محاولة فرض رمز استجابة من 401 وتعيين الرأس
WWW-Authenticate: Basic realm="SomethingGoesHere"
بعد ذلك ، سيطالب المستعرض المستخدم باسم المستخدم وكلمة المرور ، ولكن سيتم إرساله عبر نص واضح إلى المتصفح (Base64 المشفر) ، مثل هذا:
Authorization: Basic YnJpYW5iOmJvYmJ5Ym95
التي تترجم من base64 إلى:
brianb:bobbyboy
لا أعرف ما إذا كان سيكون لديك إمكانية الوصول إلى رأس التفويض من صفحة ASP الخاصة بك ، أو إذا كان خادم الويب سيخاف لأن شخصًا ما يحاول تمرير بيانات الاعتماد إليها عندما لا يتوقع ذلك ، ولكن يمكن أن يستحق محاولة...
مرحبًا ، هل تحاول الحصول على قائمة من المستخدمين من قاعدة بيانات أو استخدام أذونات تعتمد على الشبكة على خادم HTTP؟
إذا كنت تستخدم قاعدة بيانات استخدم ODBC و DSN
Dim DatabaseObject1
Set DatabaseObject1 = Server.CreateObject("ADODB.Connection")
DatabaseObject1.Open("DSN=DSNname;")
إذا كنت ترغب في مربع حوار كلمة المرور (من الخادم) ، فستحتاج إلى تغيير إعدادات IIS للحصول على دليل جيد لهذا ..