Форум: "Сети";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
ВнизВопрос по авторизации в IIS под CGI (delphi)... Найти похожие ветки
← →
Asail (2005-12-22 08:59) [0]Здрасте! Опыта в области web-рограммирования у меня пока не
много, поэтому и решил обратиться с этим, возможно,
банальным вопросом:
Как можно реализовать авторизацию пользователя на сайте
средствами CGI приложения? Поясню: есть web-сервер, на нем
БД и набор CGI. Надо, что-бы в CGI происходила проверка прав
доступа пользователя. Проблема в том, что пользователи и
пароли находятся исключительно в БД и не имеют ничего
общего с Window, ActiveDirectory, Domain, IIS пользователями.
Также, часть скриптов могут работать и без авторизации.
Спасибо.
← →
Чапаев © (2005-12-22 10:44) [1]Где-то на сайте были три отличные статьи Майка Гоблина (честь и хвала ему! Да восславится его имя в веках) о веб-приложениях. В числе прочего там объясняются и причины, почему нельзя организовать авторизацию с помощью CGI иначе чем через анус...
← →
Плохиш © (2005-12-22 10:58) [2]
> Asail (22.12.05 08:59)
Закладка "WebSnap" - компонент EndUserAdapter
> Чапаев © (22.12.05 10:44) [1]
> В числе прочего там объясняются и причины, почему нельзя
> организовать авторизацию с помощью CGI иначе чем через анус
Хм, а мужики-то и не знали.
← →
isasa © (2005-12-22 11:11) [3]Чапаев © (22.12.05 10:44) [1]
Это как это? А если у меня в CGI TADOConnection, и мне надо сформировать ConnectionString к серверу с не NT авторизацией?
← →
Плохиш © (2005-12-22 11:15) [4]
> isasa © (22.12.05 11:11) [3]
Не читай разных статей ;-)
← →
isasa © (2005-12-22 11:20) [5]Плохиш © (22.12.05 11:15) [4]
Вот я и не читаю. :)
← →
Asail (2005-12-22 14:30) [6]Так, что - никак? Только средствами Windows???
← →
Плохиш © (2005-12-22 15:09) [7]
> Asail (22.12.05 14:30) [6]
> Так, что - никак?
Мда, а так хотелось помочь :-(
← →
umbra © (2005-12-22 15:57) [8]так а в чем проблема то?
← →
isasa © (2005-12-22 15:59) [9]Asail (22.12.05 14:30) [6]
А по простому? Спросить в веб-форме логин и пароль, и на основе спрошенного формировать доступ к БД?
← →
isasa © (2005-12-22 16:21) [10]Да (как всегда)!
Если имеется ввиду через ...., т.е. зафиксировать сеанс пользователя
← →
Asail (2005-12-22 16:23) [11]
> А по простому? Спросить в веб-форме логин и пароль, и на
> основе спрошенного формировать доступ к БД?
Да, и каждый раз при запуске CGI спрашивать логин-пароль? Т.е. на каждый клик по линку пользователь должен логиниться? Он меня убьет скорее!!!
← →
Asail (2005-12-22 16:24) [12]
> т.е. зафиксировать сеанс пользователя
А где его фиксировать? А если несколько пользователей?
← →
isasa © (2005-12-22 16:26) [13]А через куки! Куки(у клиента) и таблица сеансов(на сервере).
← →
umbra © (2005-12-22 16:31) [14]
> А где его фиксировать?
в БД
← →
Asail (2005-12-22 16:31) [15]М-да-а-а!!! Сложновато, как-то... А, кстати, если не CGI а ISAPI, может проще будет?
← →
Asail (2005-12-22 17:49) [16]Кстати, мне тут намекнули, что можно покопать в строну IIS.Session...
Что за зверь, кто-нибудь знает?
← →
Чапаев © (2005-12-22 17:53) [17]
> А, кстати, если не CGI а ISAPI, может проще будет?
Вот именно.
← →
Asail (2005-12-22 18:25) [18]
> Вот именно.
А как там это можно реализовать?
(Хотя, очень уж не охота CGI на ISAPI переделывать)
← →
isasa © (2005-12-22 19:01) [19]Для ASP.NET - это Reguest.Params.Get("ASP.NET_SessionId").
Для Delphi + CGI проверь существование параметра.
← →
Alexander Panov © (2005-12-22 21:39) [20]Asail (22.12.05 18:25) [18]
(Хотя, очень уж не охота CGI на ISAPI переделывать)
Использовать ISAPI намного проще использовать, чем писать CGI.
См. FIle-New-Other- Web Server Application
← →
Asail (2005-12-22 21:53) [21]
> Использовать ISAPI намного проще использовать, чем писать
> CGI
А чем проще? С точки зрения написания, вроде, то-же самое.
← →
Alexander Panov © (2005-12-22 22:12) [22]Asail (22.12.05 21:53) [21]
А чем проще? С точки зрения написания, вроде, то-же самое.
Программа структурирована. ВОт простой пример. Сделан за 2 минуты для 2-х разных запросов:unit Unit1;
interface
uses
SysUtils, Classes, HTTPApp;
type
TWebModule1 = class(TWebModule)
procedure WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
procedure WebModule1WebActionItem2Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
WebModule1: TWebModule1;
implementation
{$R *.DFM}
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.Content :=
"<html>"+
"<body>"+
"<test1>"+
"</body>"+
"</html>";
end;
procedure TWebModule1.WebModule1WebActionItem2Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
Response.Content :=
"<html>"+
"<body>"+
"<test2>"+
"</body>"+
"</html>";
end;
end.
Кроме того, выполняться будет быстрее, так как не требуется загрузки мсполняемого файла при каждом запросе.
А еще лучше, если использовать ASP.
← →
Asail (2005-12-22 22:43) [23]Та-же самая программа будет работать и для CGI-проекта.
> Кроме того, выполняться будет быстрее, так как не требуется
> загрузки мсполняемого файла
Согласен, зато CGI надежней. А в моем проекте интенсивность запросов ожидается весьма незначительна. Так-что в моем случае это не проблема.
К тому-же, мне важнее совместимость и надежность, чем скорость.
А главное, как это решает мою изначальную проблему (автроизация на IIS)?
Пока обхожусь windows accounts :-(
← →
piople © (2006-02-06 06:29) [24]Самый простой способ защитить директорию на web сервере - это применить авторизацию. Этот пример показывает как это сделать используя только ISAPI приложение.
Эти две строчки заставляют браузер спросить имя пользователя и пароль:Response.StatusCode := 401; // Запрос логина и пароля
Response.WWWAuthenticate := "Basic realm="Delphi""; // Заголовок
Браузер посылает имя пользователя и пароль и мы получаем их:Request.Authorization;
Но информация закодирована в Base64. Существует довольно много исходников, которые показывают как кодировать/декодировать в Base64. Следующая строчка возвращает декодированные данные в mAuthorization.FBase64.DecodeData(Copy(Request.Authorization, 6, Length(Request.Authorization)), mAuthorization);
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.047 c