SAML authentication

shadow7256
Уже с Приветом
Posts: 10589
Joined: 18 Mar 2004 15:11
Location: New York -> FL

SAML authentication

Post by shadow7256 »

Уважаемые,

кто нибудь работал с SAML authentication в ASP.NET MVC приложении?
User avatar
Sergunka
Уже с Приветом
Posts: 34205
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: SAML authentication

Post by Sergunka »

shadow7256 wrote:Уважаемые,

кто нибудь работал с SAML authentication в ASP.NET MVC приложении?
Вопрос очевидно должен звучать с каким IDP Вы работали? У меня есть серьезный опыт работы с OpenAM/OpenSSO.

Про .нет не могу сказать, но полагаю общие принципы так же соблюдены Java работает через API который сидит на уровне фильтров или поршней (для томкета). Вам походу надо найти просто пример как это делается для вашего типа IDP
"A patriot must always be ready to defend his country against his government." Edward Abbey
User avatar
geek7
Уже с Приветом
Posts: 20318
Joined: 01 Dec 2003 23:16
Location: Russia->USA

Re: SAML authentication

Post by geek7 »

Sergunka wrote:
shadow7256 wrote:Уважаемые,

кто нибудь работал с SAML authentication в ASP.NET MVC приложении?
Вопрос очевидно должен звучать с каким IDP Вы работали? У меня есть серьезный опыт работы с OpenAM/OpenSSO.

Про .нет не могу сказать, но полагаю общие принципы так же соблюдены Java работает через API который сидит на уровне фильтров или поршней (для томкета). Вам походу надо найти просто пример как это делается для вашего типа IDP
+1. только, я бы сказал, комбинация IDP/SP. Например у нас IDP- DataPower (IBM appliance, но внутрях у неё неонка кажись та-же жаба), а вот SP - и AWS и доморощенные апы с OpenAM фильтром для томкета и SaaS какие-то. Для тестирования IDP на OpenAM тоже был
Говори что думаешь, думай что говоришь!
Маразм крепчал и скрепы гнулись
shadow7256
Уже с Приветом
Posts: 10589
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: SAML authentication

Post by shadow7256 »

Ну наверное не совсем так.. позвольте объяснить. Мы только начинаем работать с SAML, клиент поставил условие, чтобы наше web приложение было способно работать так. Итак..поправьте если что не так говорю :-)

1. Браузер посылает запрос на страницу. Юзер не аутентифицирован. Переправляют его на страницу логина на IDP.
2. Юзер логинится, IDP создает SAML token и отсылает пользователя обратно на страницу SP (мое ASP.NET MVC приложение под IIS).
3. SP парсит токен, создает IPrincipal объект и заносит его в HttpContext и в Thread. CurrentPrincipal, создает authentication token и дальше уже все ок.

Вопрос.. где мне в коде перехватить тот момент когда этот Principal добавляется в HttpContext? Мне нужно в этот момент (как можно раньше, еще до того как начнут работать страницы приложения) добавить информацию по этому Principal в мою базу данных.
User avatar
Sergunka
Уже с Приветом
Posts: 34205
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: SAML authentication

Post by Sergunka »

shadow7256 wrote:Ну наверное не совсем так.. позвольте объяснить. Мы только начинаем работать с SAML, клиент поставил условие, чтобы наше web приложение было способно работать так. Итак..поправьте если что не так говорю :-)

1. Браузер посылает запрос на страницу. Юзер не аутентифицирован. Переправляют его на страницу логина на IDP.
2. Юзер логинится, IDP создает SAML token и отсылает пользователя обратно на страницу SP (мое ASP.NET MVC приложение под IIS).
3. SP парсит токен, создает IPrincipal объект и заносит его в HttpContext и в Thread. CurrentPrincipal, создает authentication token и дальше уже все ок.

Вопрос.. где мне в коде перехватить тот момент когда этот Principal добавляется в HttpContext? Мне нужно в этот момент (как можно раньше, еще до того как начнут работать страницы приложения) добавить информацию по этому Principal в мою базу данных.
Вы бы сказали какой IDP/SP связку собираетесь использовать?

Вот довольно расхожий пример по ОпенАМ и федлет

https://backstage.forgerock.com/#!/docs ... edlet-java" onclick="window.open(this.href);return false;

там все максимально расжеванно. Можно установить за пол дня за день и посмотреть как это живет в натуральную величину.
"A patriot must always be ready to defend his country against his government." Edward Abbey
User avatar
geek7
Уже с Приветом
Posts: 20318
Joined: 01 Dec 2003 23:16
Location: Russia->USA

Re: SAML authentication

Post by geek7 »

shadow7256 wrote: Вопрос.. где мне в коде перехватить тот момент когда этот Principal добавляется в HttpContext? Мне нужно в этот момент (как можно раньше, еще до того как начнут работать страницы приложения) добавить информацию по этому Principal в мою базу данных.
1.-3. всё правилно в общих чертах (там ещё валидация, что именно от IDP\не протух..)
В Вашем фреймворке я очевидно не спец, но подозреваю, что Principal как-то можно ехтенднуть и, например, засадить логику в конструктор. или у кортроллера дольжны быть какие-то хукс, чтобы на создание сесси можно было подсесть
Говори что думаешь, думай что говоришь!
Маразм крепчал и скрепы гнулись
User avatar
Sergunka
Уже с Приветом
Posts: 34205
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: SAML authentication

Post by Sergunka »

shadow7256 wrote: Вопрос.. где мне в коде перехватить тот момент когда этот Principal добавляется в HttpContext? Мне нужно в этот момент (как можно раньше, еще до того как начнут работать страницы приложения) добавить информацию по этому Principal в мою базу данных.
Дело в том, что у Вас походу несколько другой API, на самом деле я мокал HTTPContext и выдергивал редирект URL из него дальше подставляя свои значения. Техника должна быть такая же и у Вас сегодня гляну в своих записках... если найду то опубликую. Всеж лет пять прошло...
"A patriot must always be ready to defend his country against his government." Edward Abbey
User avatar
Sergunka
Уже с Приветом
Posts: 34205
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: SAML authentication

Post by Sergunka »

В общем я код нашел если актуально то могу выслать весь

там важный момент, что я забираю обработку на себя через редирекшин

Code: Select all

		MockHttpServletResponse resp = new MockHttpServletResponse();
		try {
			fedletConnection(request, resp, binding);
		} catch (IOException e) {
			LOG.error(e.getMessage());
			return SAML_ERROR_PAGE;
		} catch (ServletException ee) {
			LOG.error(ee.getMessage());
			return SAML_ERROR_PAGE;
		} catch (SAML2Exception e) {
			LOG.error(e.getMessage());
			return SAML_ERROR_PAGE;
		} catch (Exception e) {
			LOG.error(e.getMessage());
			return SAML_ERROR_PAGE;
		}
		LOG.info("Redirect URL:" + resp.getRedirectedUrl());

		return resp.getRedirectedUrl();
Тогда мне пришлось еще и свой мок писать сейчас это стандартный API

http://docs.spring.io/spring/docs/curre ... ponse.html" onclick="window.open(this.href);return false;
"A patriot must always be ready to defend his country against his government." Edward Abbey
shadow7256
Уже с Приветом
Posts: 10589
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: SAML authentication

Post by shadow7256 »

Пасибо буду разбираться :)
User avatar
Sergunka
Уже с Приветом
Posts: 34205
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: SAML authentication

Post by Sergunka »

shadow7256 wrote:Пасибо буду разбираться :)
Вот здесь я заясняю за СЕМЛ и сею разумное, доброе, вечное - братьям по разуму. Просто чтоб пост не копировать дам ссылку - там много полезного походу можно посмотреть в существующих опен соурсах.

https://forum.predix.io/questions/5046/ ... nswer-5084" onclick="window.open(this.href);return false;

Спрашивайте не стесняйтесь... тема довольно неподъемная в одиночку разбираться прийдется довольно долго.
"A patriot must always be ready to defend his country against his government." Edward Abbey
shadow7256
Уже с Приветом
Posts: 10589
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: SAML authentication

Post by shadow7256 »

А да, забыл сказать. В качестве IDP мы используем Windows Federation server for Active Directory.
User avatar
Sergunka
Уже с Приветом
Posts: 34205
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: SAML authentication

Post by Sergunka »

shadow7256 wrote:А да, забыл сказать. В качестве IDP мы используем Windows Federation server for Active Directory.
Как там дело с SAML обстоит?
"A patriot must always be ready to defend his country against his government." Edward Abbey
shadow7256
Уже с Приветом
Posts: 10589
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: SAML authentication

Post by shadow7256 »

Да вроде разобрались, спасибо :)

С моей стороны, как разработчику клиента, нужно было правильно настроить конфигурацию Federation Authentication в нашем веб приложении. Указать где находится Identity Provider и куда потом делать Reply. Другая команда настроила этот Windows Federation server for Active Directory (в качестве IDP), чтобы он отсылал нам token, в котором есть все, что нам нужно для правильной аутентификации (Roles, Groups, etc).

ну и последняя часть у меня была задача сделать так, что в случае если идет работа с Federation authentication то сделать новый custom membership provider и работать уже с той информацией, которую мне прислал Identity Provider.

Вообщем пока у нас работает, но посмотрим что будет когда реальный клиент поставит софт у себя :)
shadow7256
Уже с Приветом
Posts: 10589
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: SAML authentication

Post by shadow7256 »

Оказалось все немного сложнее, чем нам казалось.

Что мы сделали у себя это мы имплементировали WS-Federation (у нас Microsoft Web application).

А SAML это немного другое. Принцип тот же, но Sign in протокол, authentication type и token type они разные.

У клиента стоит siteminder в качестве IDP. А мы работали у себя с ADFS.

вообщем напоролись немного на грабли..
mynameiszb
Уже с Приветом
Posts: 1666
Joined: 16 Jul 2009 14:18
Location: Uganda

Re: SAML authentication

Post by mynameiszb »

shadow7256 wrote:вообщем напоролись немного на грабли..
О, а подробнее можно на эту тему? У меня ситуация еще хуже - надо на SAML сервер из c# консоли ходить... WF-Federation будет третьим шагом, если не дальше..
shadow7256
Уже с Приветом
Posts: 10589
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: SAML authentication

Post by shadow7256 »

mynameiszb wrote:
shadow7256 wrote:вообщем напоролись немного на грабли..
О, а подробнее можно на эту тему? У меня ситуация еще хуже - надо на SAML сервер из c# консоли ходить... WF-Federation будет третьим шагом, если не дальше..
Сначала мы использовали WIF модуль (Windows Identity Framework).. а это не SAML, это WS-Federation... потом мы взяли third party component - kentor for ASP.NET. Вот через него и сделали реальный SAML. Там тоже не все просто.. с ASP.NET MVC он вроде почти сразу заработал, там главное в конфиг файле приложения его правильно настроить.. но в другом приложении (Backbone, SPA), вот там у нас один чувак реально менял до фига чего.. как ходить на SAML сервер из консоли я не знаю :(
mynameiszb
Уже с Приветом
Posts: 1666
Joined: 16 Jul 2009 14:18
Location: Uganda

Re: SAML authentication

Post by mynameiszb »

shadow7256 wrote:Сначала мы использовали WIF модуль (Windows Identity Framework).. а это не SAML, это WS-Federation... потом мы взяли third party component - kentor for ASP.NET. Вот через него и сделали реальный SAML. Там тоже не все просто.. с ASP.NET MVC он вроде почти сразу заработал, там главное в конфиг файле приложения его правильно настроить.. но в другом приложении (Backbone, SPA), вот там у нас один чувак реально менял до фига чего.. как ходить на SAML сервер из консоли я не знаю :(
Понял, буду копать.

Там две неприятных фишки. Первая - это отсутствие внятного описания для шарпа - как на SAML сервера ходить. Технология с точки зрения MS - чужая, поэтому ничего толком нет. Типа - берите стандарт и сами ручками. Мы объекты под .Net 4.5 добавили, значит, осилите.

И если через WIF ходить - то надо бриджи писать, которые будут один стандарт в другой переводить. Под Asp.Net где-то на форумах по крохам мелькает, что народ это делал или даже куски исходников есть. Но они для консоли сильно отличаются - объекты другие, идеология вообще другая.
shadow7256
Уже с Приветом
Posts: 10589
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: SAML authentication

Post by shadow7256 »

mynameiszb wrote:Технология с точки зрения MS - чужая, поэтому ничего толком нет.
абсолютно точно. Нам крупно повезло, что мы нашли этот kentor проект. У МС для SAML ничего нет. Под ADFS пожалуйста. Я помню мы так обрадовались, когда дали клиенту версию нашего софта (WS Federation), довольно быстро разобрались как сделать..а потом очень сильно разочаровались, когда оказалось, что это не то, что нужно. Если бы не kentor, не знаю что было бы...

Return to “Вопросы и новости IT”