HTTP-аутентификация (базовая или дайджест) в ASP Classic через IIS [закрыто]
-
03-07-2019 - |
Вопрос
Я хочу разработать веб-сайт в классическом ASP, который использует HTTP-аутентификацию для базы данных или списка паролей, находящихся под контролем сценария.В идеале решение не должно включать никаких компонентов или настроек IIS, поскольку сценарий должен запускаться в размещенной среде.
Любые подсказки/код глубоко ценятся.
Решение
Базовую аутентификацию HTTP можно выполнить в чистом классическом ASP VBScript.
Вам понадобится что-то для декодирования базы 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 Unauthorized, просмотр не будет проходить через учетные данные.
Вы можете попробовать принудительно ввести код ответа 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, чтобы получить хорошее руководство по этому вопросу.