Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / И снова аутентификация и авторизация... / 11 сообщений из 11, страница 1 из 1
10.02.2015, 20:41
    #38876349
EDUARD SAPOTSKI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова аутентификация и авторизация...
Не секрет что есть 100500 метод организации аутентификации и авторизации при юзинге WCF и каждая метода костыльнее другой. Основная метода предлагаемая мелкософтом (юзинг родного мембершипера ASP.NET) по мне так самая костыльная - кастомизировать очень проблематично, в реальных проектах чаще всего вызов метода WCF привязан к конкретному юзеру а не к роли. В базе как правило 100500 таблиц имеют связи с таблицей юзеров, что опять не комильфо в случае с мембершипером, да еще все это дело тормозит и переполнено функционалом 90% из которого не юзается в реальных проектах. Кастомных вариантов просто тьма, кто куки передает если биндинг по http, кто добавляет заголовки к SOAP с логинами/паролями/токенами и т.д...
Года 3 назад, разбираясь со всем этим делом, забил на разные мембершиперы и тупо в каждый метод передаю гуид который генерю каждому юзеру при входе в ситему, типа того:
Код: c#
1.
2.
3.
4.
5.
6.
[OperationContract]
public void DoWork(Guid? accessKey, object parametr1, object parametr2...)
{
    // Здесь по accessKey определяю юзера, можно ли ему дергать этот метод и т.д...
    // И дальше метод что-то делает
}


В принципе меня все устраивает, уже несколько десятков приложений собрал по этой методе, все работает, никто ничего не взломал и не задосил.
Но собственно вопрос - к каким методам Вы пришли и что используете в своих проектах?
...
Рейтинг: 0 / 0
18.02.2015, 14:26
    #38882898
Березовский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова аутентификация и авторизация...
По сути использую похожий подход.
Сервисом пользуются внешние клиенты, которым выдается свой ID при регистрации.
В каждый метод сервиса передается этот ID и подпись.
Для подписи есть правила формирования- это MD5 хеш, полученный из склеивания строкового представления всех параметров+ пароль, который выдается пользователю при регистрации.
На своей стороне делаю проверку, по ID клиента запрашиваю его пароль из своей таблицы.
Так же склеиваю строку из пришедших прараметров+ пароль, получаю подпись и сравниваю с той, которая на входе.
Если совпало- значит наш клиент
...
Рейтинг: 0 / 0
18.02.2015, 16:32
    #38883096
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова аутентификация и авторизация...
БерезовскийПо сути использую похожий подход.
Сервисом пользуются внешние клиенты, которым выдается свой ID при регистрации.
В каждый метод сервиса передается этот ID и подпись.
Для подписи есть правила формирования- это MD5 хеш, полученный из склеивания строкового представления всех параметров+ пароль, который выдается пользователю при регистрации.
На своей стороне делаю проверку, по ID клиента запрашиваю его пароль из своей таблицы.
Так же склеиваю строку из пришедших прараметров+ пароль, получаю подпись и сравниваю с той, которая на входе.
Если совпало- значит наш клиент
Это круто.
Я в сервисе для внутреннего пользования использую прямо имя пользователя, взятое из текущего логина - нет смысла шифровать.
Но смысл тот же - имя влияет на то, что конкретному юзеру сервер отдает.
...
Рейтинг: 0 / 0
21.02.2015, 08:44
    #38885556
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова аутентификация и авторизация...
EDUARD SAPOTSKIНо собственно вопрос - к каким методам Вы пришли и что используете в своих проектах?
Мы используем федеративную аутентификацию.
Это добавляет сложностей с развертыванием, но дает и свои преимущества.
Все делается на базе WIF (сейчас это часть .Net Framework). Его же [WIF] средствами, мы проверяем и credentials клиента на сервисе токенов.

Что касается вашего вопроса, то я немного не уловил его суть - в чем именно состоит "костыльность" стандартных аутентификационных методов?

Собственно, базовый WCF предлагает ровно 4 типа credentials, которые вы можете передать с клиента:
- Windows . Передается некая крипто-функция на основе доменного аккаунта и пароля. Работает в рамках домена и для доменных пользователей (т.е. можно обращаться и извне, но пользователь все равно доменный).
- User/Password . Передается сам пароль. Требуется защищенный канал (хоть на уровне транспорта, хоть на уровне сообщений). Для проверки можно использовать или Windows Security (тогда это мало отличается от первого варианта), или ASP.Net Membership Provider о котором вы упомянули или Custom UserName/Password validator. Последний прост как 3 рубля - там 1 метод с именем и паролем и все...
- Certificate . Передается открытая часть сертификата + образец подписи, который подтверждает наличие у вас закрытого ключа (чуть сложнее, на самом деле, но суть примерно такая). Обычно такой метод используют для аутентификации сервис-сервис, но можно аутентифицировать и пользователей (тогда нужно просто иметь механизм сопоставления "сертификат - пользователь"). Я правда использовал этот вариант только для аутентификации сервисов, но помню, что есть готовый механизм маппинга сертификатов на Windows-аккаунты.
- Issued token . Собственно это и есть основа для федеративной аутентификации, когда вы у некоего сервиса получаете токен, а затем уже им пользуетесь для обращения ко всем остальным.

Вроде все достаточно просто и понятно.
...
Рейтинг: 0 / 0
21.02.2015, 08:52
    #38885558
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова аутентификация и авторизация...
EDUARD SAPOTSKIВ принципе меня все устраивает, уже несколько десятков приложений собрал по этой методе, все работает, никто ничего не взломал и не задосил.
Я не знаю, как именно вы генерируете Guid, надеюсь, вы не используете для этого стандартный Guid-генератор, (тот который Guid.NewGuid()). Ибо последний - вещь сугубо детерминированная и абсолютно неслучайная. Подобрать её не составит труда.

Еще я очень надеюсь, что вы контролируете время сессии, т.е. время жизни вашего accessKey, потому что в противном случае, подбор действующих сессий резко упрощается.

Ну а так, вы просто создали свою реализацию механизма сессий. Чем она лучше стандартных я не берусь судить. Может и лучше... Единственное, я бы все же доработал слегка этот механизм и передавал бы этот Id сессии неявно (хотя может у вас так и сделано, а сигнатуру с явным Guid вы привели просто для понимания идеи - тогда предложение снимается).
...
Рейтинг: 0 / 0
21.02.2015, 09:39
    #38885562
EDUARD SAPOTSKI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова аутентификация и авторизация...
МихаилРЯ не знаю, как именно вы генерируете Guid, надеюсь, вы не используете для этого стандартный Guid-генератор, (тот который Guid.NewGuid()).
Да, именно тот который Guid.NewGuid() если логика на апп-сервере или newid() если на sql-сервере.
МихаилРИбо последний - вещь сугубо детерминированная и абсолютно неслучайная. Подобрать её не составит труда.
Можете показать мастер-класс по подбору детерминированного гуида? А то шума в сети по этому поводу много, а подобрать желающих мало.
МихаилРЕще я очень надеюсь, что вы контролируете время сессии, т.е. время жизни вашего accessKey, потому что в противном случае, подбор действующих сессий резко упрощается.
Да, конечно.
МихаилРЕдинственное, я бы все же доработал слегка этот механизм и передавал бы этот Id сессии неявно (хотя может у вас так и сделано, а сигнатуру с явным Guid вы привели просто для понимания идеи - тогда предложение снимается).
Если честно, то передаю явно, но полностью с Вами согласен - надо передавать как-то не явно, просто переделывать работающие приложения нет резона, буду делать что-то новое обязательно в хидеры куда-то засуну.
...
Рейтинг: 0 / 0
21.02.2015, 10:10
    #38885571
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова аутентификация и авторизация...
EDUARD SAPOTSKIМожете показать мастер-класс по подбору детерминированного гуида? А то шума в сети по этому поводу много, а подобрать желающих мало.
Да, вы правы - мои знания о природе GUID несколько устарели.
На текущий момент от инкрементального GUID Microsoft отказались и используют pseudo random реализацию. На сколько она устойчива к подбору, судить не берусь.
...
Рейтинг: 0 / 0
23.02.2015, 11:22
    #38886314
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова аутентификация и авторизация...
МихаилРEDUARD SAPOTSKIМожете показать мастер-класс по подбору детерминированного гуида? А то шума в сети по этому поводу много, а подобрать желающих мало.
Да, вы правы - мои знания о природе GUID несколько устарели.
На текущий момент от инкрементального GUID Microsoft отказались и используют pseudo random реализацию. На сколько она устойчива к подбору, судить не берусь.

все зависит от цены вопроса
...
Рейтинг: 0 / 0
23.02.2015, 11:57
    #38886334
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова аутентификация и авторизация...
>EDUARD SAPOTSKI, 10 фев 15, 20:41 [17246856]
>Но собственно вопрос - к каким методам Вы пришли и что используете в своих проектах?

Посмотри здесь . Есть и GUID и компрессия и шифрование.

И маленькое прибавление:
Крипто.
Жизнь не стоит на месте. У некоторых появилась возможность хранить весь трафик сессии взаимодействия <клиент,сервер приложений> в надежде получить старый закрытый ключ сервера и дешифрировать. В среде прототипа попытаемся закрыть эту брешь. Сделаем так (предложение):
1. клиент строит временную пару асимметричного алгоритма (нужна только для получения сессионного симметричного ключа), включающую открытый_ключ_клиента(окк)
2. клиент строит guid_обмена_ключами (g_ок)
3. клиент строит модифицированный_открытый_ключ_клиента(мокк) = mod2(окк,g_ок)
4. клиент шифрует <g_ок> открытым ключом сервера, добавляет мокк, передаёт пакет серверу
5. сервер получает пакет, восстанавливает g_ок и окк
6. сервер формирует сессионный_симметричный_ключ(сск), сессионный_mod2(md2) и guid_виртуальной_сессии(g_вс)
7. сервер шифрует <сск,md2> посредством окк, добавляет g_вс и пакет передает клиенту.
8. клиент восстанавливает сск и md2, теперь сервер и клиент имеют сск, md2, g_вс.
9. клиент передает серверу в рамках сессии хэши <Имя,Пароль>. Если ок, то виртуальная сессия становится реальной, иначе уничтожается

С уважением,
Владимир.
...
Рейтинг: 0 / 0
23.02.2015, 12:13
    #38886345
EDUARD SAPOTSKI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова аутентификация и авторизация...
ВМоисеевИ маленькое прибавление:
Крипто.
Жизнь не стоит на месте. У некоторых появилась возможность хранить весь трафик сессии взаимодействия <клиент,сервер приложений> в надежде получить старый закрытый ключ сервера и дешифрировать. В среде прототипа попытаемся закрыть эту брешь. Сделаем так (предложение):
1. клиент строит временную пару асимметричного алгоритма (нужна только для получения сессионного симметричного ключа), включающую открытый_ключ_клиента(окк)
2. клиент строит guid_обмена_ключами (g_ок)
3. клиент строит модифицированный_открытый_ключ_клиента(мокк) = mod2(окк,g_ок)
4. клиент шифрует <g_ок> открытым ключом сервера, добавляет мокк, передаёт пакет серверу
5. сервер получает пакет, восстанавливает g_ок и окк
6. сервер формирует сессионный_симметричный_ключ(сск), сессионный_mod2(md2) и guid_виртуальной_сессии(g_вс)
7. сервер шифрует <сск,md2> посредством окк, добавляет g_вс и пакет передает клиенту.
8. клиент восстанавливает сск и md2, теперь сервер и клиент имеют сск, md2, g_вс.
9. клиент передает серверу в рамках сессии хэши <Имя,Пароль>. Если ок, то виртуальная сессия становится реальной, иначе уничтожается
Все это конечно интересно, но есть мнение(с которым я солидарен), что чем проще - тем надежнее и лучше. С таким длинным алгоритмом выстрелить себе в ногу думаю более чем реально.

ВМоисеевПосмотри здесь . Есть и GUID и компрессия и шифрование.
Ссылка, как понял, нитуда.
...
Рейтинг: 0 / 0
23.02.2015, 14:18
    #38886416
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И снова аутентификация и авторизация...
>EDUARD SAPOTSKI, сегодня, 12:13 [17301151]
>Ссылка, как понял, нитуда.

Извините, это здесь .

С уважением,
Владимир.
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / И снова аутентификация и авторизация... / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]