![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по авторизации в IIS под CGI (delphi)... [D7, WinXP]
Asail © (2005-12-22 08:59:00)Здрасте! Опыта в области web-рограммирования у меня пока не
много, поэтому и решил обратиться с этим, возможно,
банальным вопросом:
Как можно реализовать авторизацию пользователя на сайте
средствами CGI приложения? Поясню: есть web-сервер, на нем
БД и набор CGI. Надо, что-бы в CGI происходила проверка прав
доступа пользователя. Проблема в том, что пользователи и
пароли находятся исключительно в БД и не имеют ничего
общего с Window, ActiveDirectory, Domain, IIS пользователями.
Также, часть скриптов могут работать и без авторизации.
Спасибо.
piople (2006-02-06 06:29:00) [1]Самый простой способ защитить директорию на 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);
Asail (2005-12-22 22:43:00) [2]Та-же самая программа будет работать и для CGI-проекта.
> Кроме того, выполняться будет быстрее, так как не требуется
> загрузки мсполняемого файла
Согласен, зато CGI надежней. А в моем проекте интенсивность запросов ожидается весьма незначительна. Так-что в моем случае это не проблема.
К тому-же, мне важнее совместимость и надежность, чем скорость.
А главное, как это решает мою изначальную проблему (автроизация на IIS)?
Пока обхожусь windows accounts :-(
Alexander Panov (2005-12-22 22:12:00) [3]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 21:53:00) [4]
> Использовать ISAPI намного проще использовать, чем писать
> CGI
А чем проще? С точки зрения написания, вроде, то-же самое.
Alexander Panov (2005-12-22 21:39:00) [5]Asail (22.12.05 18:25) [18]
(Хотя, очень уж не охота CGI на ISAPI переделывать)
Использовать ISAPI намного проще использовать, чем писать CGI.
См. FIle-New-Other- Web Server Application
isasa (2005-12-22 19:01:00) [6]Для ASP.NET - это Reguest.Params.Get("ASP.NET_SessionId").
Для Delphi + CGI проверь существование параметра.
Asail (2005-12-22 18:25:00) [7]
> Вот именно.
А как там это можно реализовать?
(Хотя, очень уж не охота CGI на ISAPI переделывать)
Чапаев (2005-12-22 17:53:00) [8]
> А, кстати, если не CGI а ISAPI, может проще будет?
Вот именно.
Asail (2005-12-22 17:49:00) [9]Кстати, мне тут намекнули, что можно покопать в строну IIS.Session...
Что за зверь, кто-нибудь знает?
Asail (2005-12-22 16:31:00) [10]М-да-а-а!!! Сложновато, как-то... А, кстати, если не CGI а ISAPI, может проще будет?
umbra (2005-12-22 16:31:00) [11]
> А где его фиксировать?
в БД
isasa (2005-12-22 16:26:00) [12]А через куки! Куки(у клиента) и таблица сеансов(на сервере).
Asail (2005-12-22 16:24:00) [13]
> т.е. зафиксировать сеанс пользователя
А где его фиксировать? А если несколько пользователей?
Asail (2005-12-22 16:23:00) [14]
> А по простому? Спросить в веб-форме логин и пароль, и на
> основе спрошенного формировать доступ к БД?
Да, и каждый раз при запуске CGI спрашивать логин-пароль? Т.е. на каждый клик по линку пользователь должен логиниться? Он меня убьет скорее!!!
isasa (2005-12-22 16:21:00) [15]Да (как всегда)!
Если имеется ввиду через ...., т.е. зафиксировать сеанс пользователя
isasa (2005-12-22 15:59:00) [16]Asail (22.12.05 14:30) [6]
А по простому? Спросить в веб-форме логин и пароль, и на основе спрошенного формировать доступ к БД?
umbra (2005-12-22 15:57:00) [17]так а в чем проблема то?
Плохиш (2005-12-22 15:09:00) [18]
> Asail (22.12.05 14:30) [6]
> Так, что - никак?
Мда, а так хотелось помочь :-(
Asail (2005-12-22 14:30:00) [19]Так, что - никак? Только средствами Windows???
isasa (2005-12-22 11:20:00) [20]Плохиш © (22.12.05 11:15) [4]
Вот я и не читаю. :)