Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.039 c
15-1147020493
AlexanderMS
2006-05-07 20:48
2006.06.04
Украшение кода


9-1130941735
Кирилл_
2005-11-02 17:28
2006.06.04
GLScene


1-1146105828
DF_Slayer
2006-04-27 06:43
2006.06.04
property Shape = stLine


2-1147682714
Сергей И
2006-05-15 12:45
2006.06.04
Индексы


2-1147762632
ttt_111
2006-05-16 10:57
2006.06.04
Работа с QRreport.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский