HTTP-аутентификация (базовая или дайджест) в ASP Classic через IIS [закрыто]

StackOverflow https://stackoverflow.com/questions/208063

Вопрос

Я хочу разработать веб-сайт в классическом 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, чтобы получить хорошее руководство по этому вопросу.

http://www.authenticationtutorial.com/tutorial/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top