Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.04;
Скачать: CL | DM;

Вниз

Вопрос по авторизации в 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.054 c
1-1145875860
TStas
2006-04-24 14:51
2006.06.04
Как сделать окно активным и послать клавиши?


10-1120207226
Руслан
2005-07-01 12:40
2006.06.04
Открытие нового окна IE при использовании TWebBrowser.


4-1142135959
Arazel
2006-03-12 06:59
2006.06.04
Как узнать командную строку чужого процесса


3-1144506558
veb
2006-04-08 18:29
2006.06.04
Получить порядковый номер


2-1147855038
aleshap
2006-05-17 12:37
2006.06.04
Метод