о наболевшем - windows authentication httpchannel.

 
0
 
.NET
ava
Shit_happenes | 22.08.2007, 12:25
Наболевшая тема - Как организовать виндовую аутентификацию по HttpChannel без IIS?

Нашёл статейку в msdn http://msdn2.microsoft.com/en-us/library/ms973909.aspx.

Может можно как-то попроще сделать?
Желательно что-то передать в CallContext, а на сервере считать это и сделать как-то аутентификацию.

Comments (13)
ava
SpaceSpace | 24.08.2007, 08:55 #
насколько хватает моих знаний можно сделать сложнее.
а так, вместо ремотинга грядет WCF
может имеет смысл посмотреть там?
ava
Shit_happenes | 24.08.2007, 09:18 #
Пока что сидим на старых технологиях.
А сложнее как сделать?
ava
SpaceSpace | 24.08.2007, 09:20 #
на счет сложнее - игра слов, ссори
а клиент с сервером в одном домене?
во 2ом фреймворке есть пространства System.Security.Principal, System.Security.Permissions
посмотри там казаемо Windows
ava
Shit_happenes | 24.08.2007, 09:24 #
Да
ava
SpaceSpace | 24.08.2007, 09:28 #
RBS
WindowsIdentity смотрел?
ava
Shit_happenes | 24.08.2007, 09:34 #
т.е. WndowsIdentity?
передать клиентское WIndowsIdentity на сервер?
ava
SpaceSpace | 24.08.2007, 09:36 #
опиши проблему подробнее.
Зачем тебе аутентификация на другой машине, для каких операций?

added later:
имеется ввиду
нельзя разве замутить что-то типа?


WindowsPrincipal wp = (HttpContext.Current.User as WindowsPrincipal);
if ( wp.IsInRole("PowerUser") )
{
// пользователь авторизован и включен в роль PowerUser}



added later:


// Create a new CredentialCache object and fill it with the network
// credentials required to access the server.
MyCredentialCache = new System.Net.CredentialCache();
MyCredentialCache.Add(new System.Uri(strCalendarURI),
"NTLM",
new System.Net.NetworkCredential(strUserName, strPassword, strDomain)
);
// Create the HttpWebRequest object.
Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strCalendarURI);


что-то подобное делают через webDav
ava
Shit_happenes | 24.08.2007, 09:59 #
Немного попроще.
В зарегистрированном на сервере объекте есть подключение
MSSqlServer при помощи Trusted_Connection=true.
Необходимо чтобы при подключении к БД брались параметры не сервера, а подключенного по ремоутингу клиента.

Если второй параметр при регистрации канала = true

ChannelServices.RegisterChannel(tcpChannel, true);

то

LogicalCallContextData logicalCallContextData = CallContext.GetData("data") as LogicalCallContextData;
WindowsIdentity identity = Thread.CurrentPrincipal.Identity as WindowsIdentity;
SqlConnection sqlConn = new SqlConnection("DataSource=asd\\sqlexpress;Trusted_Connection=yes;Database=DB");

подключается с правами клиента.

А вот как тоже самое сделать когда параметр установлен в false,
пусть даже по TcpChannel.
ava
SpaceSpace | 24.08.2007, 10:10 #
передаеш по сети токен.

WindowsIdentity ss = WindowsIdentity.GetCurrent();
ss.Token <--
а на сервере делаеш


WindowsIdentity identity = WindowsIdentity.Impersonate(token);


токен можешь передать по сети?

или я гоню чего... smile
ava
Shit_happenes | 24.08.2007, 10:29 #
Token это IntPtr,
т.е. на клиенте Token указывает на один адрес в своей памяти.
Если этот IntPtr серверу передать, то в серверной памяти этот указатель не будет указывать на клиентские данные, а будет непонятно на что указывать.
ava
SpaceSpace | 24.08.2007, 10:32 #
во-во и я про то же... гоню

added later:
smile а через

WindowsImpersonationContext
тоже привязка к конкретной машине привязан, по токену
ava
Shit_happenes | 24.08.2007, 10:50 #
WindowsImpersonationContext берётся из экземпляра WindowsIdentity;
Как я понял, единственный вариант решения проблемы - это реализация статьи MSDN.
ava
SpaceSpace | 24.08.2007, 14:10 #
эхх smile
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit