ASP.NET Core authentication

User avatar
ie
Уже с Приветом
Posts: 11019
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: ASP.NET Core authentication

Post by ie »

Oleg-NY wrote:В порядке бреда, а почему не зашифровать всю нужную инфу о группах/привелегиях и не засунуть ее в те же куки, чтобы апликухи не ходили каждый раз к сервису за ней, что есть сильно дольше, чем расшифровать? Я бы лишний раз к базе не обращался и особенно если пользователей много...
почему нет? я вижу только одну проблему с этим. если у нас какой то секретный эвайронмент.
и мы типа хотим прикрыть юзеру кислород пока он залогинен на вебсайте....
если вся инфа храница в кукэс, то юзер будет иметь доступ пока кукес не протухнут или юзер сайн офф.
если каждый раз лазим в базу то изменение уровня доступа сразу отразится на правах юзера. :old:
Oleg-NY
Уже с Приветом
Posts: 2418
Joined: 16 Jul 2004 00:32
Location: NY, NY

Re: ASP.NET Core authentication

Post by Oleg-NY »

Сервер - понятие абстрактное, а не физическое. Лучше абстрагироваться от этого, тогда легче будет спрятаться за load balancer.
Oleg-NY
Уже с Приветом
Posts: 2418
Joined: 16 Jul 2004 00:32
Location: NY, NY

Re: ASP.NET Core authentication

Post by Oleg-NY »

ie wrote:
Oleg-NY wrote:В порядке бреда, а почему не зашифровать всю нужную инфу о группах/привелегиях и не засунуть ее в те же куки, чтобы апликухи не ходили каждый раз к сервису за ней, что есть сильно дольше, чем расшифровать? Я бы лишний раз к базе не обращался и особенно если пользователей много...
почему нет? я вижу только одну проблему с этим. если у нас какой то секретный эвайронмент.
и мы типа хотим прикрыть юзеру кислород пока он залогинен на вебсайте....
если вся инфа храница в кукэс, то юзер будет иметь доступ пока кукес не протухнут или юзер сайн офф.
если каждый раз лазим в базу то изменение уровня доступа сразу отразится на правах юзера. :old:
Я подумал об этом и потому не отверг хождение за валилацией токена на сервис, но только для этого: да или нет.
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: ASP.NET Core authentication

Post by shadow7256 »

тут геморой еще вот в чем. Те другие приложения они "изготовлены" из разных технологий. Одно приложение сделано на ASP.NET MVC 2, другое приложение это вообще SPA (AngularJS 1.5). Каждое из них сейчас понятно дело по разному работает с authenticantion/authorization.

Вот допустим пользователь залогинился на главном портале. Допустим получил в ответ объект какого нибудь класса User. Все валидно, объект содержит кучу полей. Дальше он видит на странице портала несколько URLs которые открывают разные приложения...А дальше что? Как передать этот объект тем другим приложениям? Как дать понять приложениям что пользователь залогинен ? :pain1:
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: ASP.NET Core authentication

Post by shadow7256 »

пока вырисовывается такая картина..пользователь логинится в портал. Происходит валидация, пользователь установлен, получена инфа о нем. Затем портал строит token (каким нибудь образом зашифрованый) в котором зашифрованы имя пользователя и его Группы. Потом этот токен каким то образом (а вот каким?) передается в другие приложения. Передавать через URL параметр не комильфо.. токен может быть длинным. то есть надо как то через POST делать и помещать Token в хедере... а красиво ли открывать приложение через POST запрос?

но вообще проблематично будет. Единственный способ передать инфу это добавить хедер, а добавлять его придется через Javascript...А потом делать запрос на другой домен через тот же Ajax. CORS не позволит это сделать.
Last edited by shadow7256 on 05 Jan 2017 15:09, edited 1 time in total.
Oleg-NY
Уже с Приветом
Posts: 2418
Joined: 16 Jul 2004 00:32
Location: NY, NY

Re: ASP.NET Core authentication

Post by Oleg-NY »

Какое отношение тип запроса (GET/POST/etc.) имеет к headers в которых куки живут? Вы полагаете, что headers только у POST бывают? Боюсь вам надо почитать азы, а то вы слишком понижаете нам уровень дискуссии... ;)
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: ASP.NET Core authentication

Post by shadow7256 »

Oleg-NY wrote:Какое отношение тип запроса (GET/POST/etc.) имеет к headers в которых куки живут? Вы полагаете, что headers только у POST бывают? Боюсь вам надо почитать азы, а то вы слишком понижаете нам уровень дискуссии... ;)
дело не в GET/POST... хедер можно добавить только через Javascript.. а потом сделать вызов на другой домен. Лишь немногие современные браузеры позволят это сделать...
User avatar
ie
Уже с Приветом
Posts: 11019
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: ASP.NET Core authentication

Post by ie »

я бы посоветовал делать все КАК МОЖНО ПРОЩЕ.
тоесть если это какой то портал для внутреннего пользования внутри компании, то не заморачиваться и передовать ID как URL параметр.
сколько ползователей будет пользовать вебсайт в день?
если меньше 1 000 000 в день то не замарачиваться с кэшем а лазить в базу (или где там вы храните groups<-->users)
при каждом обращении к сереверу.

в КРАЙНЕМ случае потом можно будет оптимизировать.
Oleg-NY
Уже с Приветом
Posts: 2418
Joined: 16 Jul 2004 00:32
Location: NY, NY

Re: ASP.NET Core authentication

Post by Oleg-NY »

Если вы пользуете куки, то вам не надо ничего самому делать. Для этого сей механизм и придуман, но если вы хотите вместо этого добавлять custom header скриптом, то пожалуйста. Какие барузеры не позволяют такое делать нынче?
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: ASP.NET Core authentication

Post by shadow7256 »

Oleg-NY wrote:Если вы пользуете куки, то вам не надо ничего самому делать. Для этого сей механизм и придуман, но если вы хотите вместо этого добавлять custom header скриптом, то пожалуйста. Какие барузеры не позволяют такое делать нынче?
Добавить custom header скриптом проблем вообще нет. Как потом правильно переправить юзера на другой домен из Javascript?

Code: Select all

<a href="javascript:Go();">Go To SnF</a>

<script language="javascript" type="text/javascript">

    function Go() {
        $.ajax({
            type: 'POST',
            url: "http://localhost:39079",
            headers: {
                "Auth": "asdfasdfasdfasdf"
            }
        });
    };

</script>
в данном случае вызовется код из приложения на http://localhost:39079" onclick="window.open(this.href);return false;, все окейно, но пользователь все равно останется на той странице где находится линк Go... наверное я как то неправильно делаю редирект.

когда я говорил про "не все браузеры" я имел в виду, что не все браузеры позволяют делать Cross domain request.
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: ASP.NET Core authentication

Post by shadow7256 »

ie wrote:я бы посоветовал делать все КАК МОЖНО ПРОЩЕ.
тоесть если это какой то портал для внутреннего пользования внутри компании, то не заморачиваться и передовать ID как URL параметр.
сколько ползователей будет пользовать вебсайт в день?
если меньше 1 000 000 в день то не замарачиваться с кэшем а лазить в базу (или где там вы храните groups<-->users)
при каждом обращении к сереверу.

в КРАЙНЕМ случае потом можно будет оптимизировать.
передавать ID чего? ID юзера? ну тогда рано или поздно кастомер узнает какой ID валидный и будет просто напрямую заходить в те приложения в обход портала.. это не есть гуд.
User avatar
ie
Уже с Приветом
Posts: 11019
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: ASP.NET Core authentication

Post by ie »

shadow7256 wrote: передавать ID чего? ID юзера? ну тогда рано или поздно кастомер узнает какой ID валидный и будет просто напрямую заходить в те приложения в обход портала.. это не есть гуд.

SessionID. можно добавить к нему Date-Time и зашифровать, тагда даже "russians" не смогут взломать ваш сайт. :great:
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: ASP.NET Core authentication

Post by shadow7256 »

ie wrote:
shadow7256 wrote: передавать ID чего? ID юзера? ну тогда рано или поздно кастомер узнает какой ID валидный и будет просто напрямую заходить в те приложения в обход портала.. это не есть гуд.

SessionID. можно добавить к нему Date-Time и зашифровать, тагда даже "russians" не смогут взломать ваш сайт. :great:
наверное так проще всего будет. При логине в портал генерим SessionID (тот же GUID). Добавляем к линку на другие приложения. При клике на линк приложение откроется, поищет SessionID. Если нет его то кинет обратно на страницу портала. Если есть, залезет в базу, вытащит пользователя, авторизует и вперед..

в гробу я видал все эти custom headers и прочую херню...
Oleg-NY
Уже с Приветом
Posts: 2418
Joined: 16 Jul 2004 00:32
Location: NY, NY

Re: ASP.NET Core authentication

Post by Oleg-NY »

Точно! Нахрен все! Не гугль с амазном какие-нить, вавилоны на голове строить... )))

В вашем последнем: "поищет SessionID" должно уже возвращать юзера - один сервис.
shadow7256
Уже с Приветом
Posts: 9402
Joined: 18 Mar 2004 15:11
Location: New York -> FL

Re: ASP.NET Core authentication

Post by shadow7256 »

Oleg-NY wrote:Точно! Нахрен все! Не гугль с амазном какие-нить, вавилоны на голове строить... )))

В вашем последнем: "поищет SessionID" должно уже возвращать юзера - один сервис.
тут еще вот в чем проблемка может быть.. Портал может использовать Identity authentication (бывшая Forms) или Windows authentication. В первом случае у клиента будет база данных (тот же SQL Server) с юзерами и группами, а во втором случае юзер будет тащиться из Active Directory. Вот именно поэтому и хотелось сделать так, что портал сам достанет юзера (либо из базы либо из Active Directory), создаст какой то объект класса, заполнит поля, сериализует (в тот же token какой нибудь) и уже передаст его дальше в приложения.. а приложения уже "распакуют" этот объект и обработают..

Допустим одно из приложений написано на ASP.NET MVC, тогда можно было бы в Session_Start вытащить этот токен, распаковать, создать ClaimsPrincipal, добавить claims, выставить этот Principal и все.. клиент "залогинен". Больше ничего делать не надо, остальной код уже будет работать с User (UserPrincipal).. собственно он и щас уже работает..

таким образом приложениям из портала наплевать где живет юзер.. в базе данных или в Active Directory. А так придется порталу генерить SessionID, где то его хранить.. запоминать что с этим SessionID связано и прочее.. :(
Last edited by shadow7256 on 05 Jan 2017 16:29, edited 1 time in total.

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