2015-01-30 1 views
1

обновляется на основе вопросов от @ user18044 нижеАутентификация/авторизация веб-API с использованием SSO вместо OAUTH - будет ли она работать?

Если пользователь проходит аутентификацию в двух различных веб-приложений с помощью 2-х различных провайдеров удостоверений SAML на основе, и один из приложений, необходимо запросить данные из веб-API выставленному в другом приложении можно было бы безопасно вызывать методы веб-API в силу текущего аутентифицированного статуса пользователя в обоих приложениях без отдельного обеспечения методов API через протокол аутентификации уровня API, такой как OAUTH? Обратите внимание, что оба приложения принадлежат и управляются моей компанией и используют одни и те же домены уровня 2 и пользовательскую базу, даже несмотря на то, что серверы идентификации отличаются (один из них устарел).

Дополнительная информация: Приложение A представляет собой приложение для портала, которое будет размещать виджеты, используя данные, предоставленные из приложения B. Приложение A будет связываться только с приложением B через веб-API, предоставляемый приложением B. В настоящее время приложение B не раскрывает веб-API (кроме внутреннего для самого приложения). Это новая функциональность, которая должна быть добавлена ​​в приложение B. Приложение A будет использовать Okta в качестве своего SSO. Предложение нашего ведущего архитектора состоит в том, чтобы продолжать использовать пользовательский старый IDP-сервер, который мы разработали внутри, используя dk.nita.saml20 DLL. Я думаю, что они оба основаны на SAML, но я не думаю, что они могли бы использовать один и тот же идентификационный токен без какой-либо модернизации. Но это касается моих знаний по теме аутентификации. :) Я думаю, что план нашего архитектора состоял в том, чтобы пользователь аутентифицировался отдельно, используя два разных поставщика удостоверений, а затем только защищал веб-API с помощью CORS, его рассуждение состояло в том, что, поскольку пользователь уже известен и аутентифицирован для использования приложения B, не будет никаких последствий для безопасности, позволяющих приложению A вызывать методы веб-api приложения B, поскольку пользователь должен быть аутентифицирован в приложении B. Это кажется мне причудливым, поскольку я могу представить много переадресаций браузеров, которые могут быть не прозрачными для пользователя, но кроме этого, я просто пытаюсь выяснить, где могут быть дыры в безопасности, потому что мне кажется, что будут некоторые.

Я знаю, что этот подход не будет считаться лучшей практикой, однако, с учетом сказанного, я действительно хочу понять, почему нет. Имеются ли последствия для безопасности? Будет ли это работать? И если да, есть ли какие-либо «gotchas» или вещи, которые следует учитывать при реализации?

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

+0

удивительно, если ваш вопрос похож на мой, который я просил на сайте информационной безопасности (о протоколах/подхода в целом, а не о том, как реализовать): HTTP: // безопасность .stackexchange.com/questions/89448/proxy-authentication-to-web-apis-in-sso-environment – wrschneider

ответ

1

Трудно ответить, не зная больше о том, как точно поддерживаются ваши текущие приложения и API. Имеет ли веб-приложение и его API один и тот же идентификатор доверяющей стороны (т. Е. Может ли тот же токен использоваться для аутентификации для обоих)?

Если оба веб-приложения используют протокол WS-Federation для аутентификации пользователей, то, скорее всего, токен SAML будет храниться в файлах cookie, которые были установлены, когда поставщик удостоверений отправил токен обратно в приложение.

У вас нет доступа к этим файлам cookie с JavaScript. Если веб-API, принадлежащий к приложению B, использует тот же механизм проверки подлинности на основе файлов cookie, вы можете использовать это, если вы допустили cross origin resource sharing.

Если ваш веб-API использует что-то вроде схемы аутентификации маркера на предъявителя (например, OAuth) или имеет другой идентификатор доверенной стороны в STS, это, очевидно, не сработает.

Я думаю, причина в том, что это не помогает проверить ваш кишок потому, что вы в основном получаете доступ к веб-API так, как это делает cross-site request forgery attack.

Проблема, которую я вижу в этом подходе, заключается в том, что если пользователь не аутентифицирован с другим веб-приложением, вызов вашего API также потерпит неудачу.

+0

Благодарим за отзыв. Я чувствую себя немного более осведомленным. :) Все еще не полностью, но это начинает иметь для меня больше смысла. Я обновил свой вопрос, основываясь на ваших отзывах выше. Можете ли вы добавить что-нибудь еще на основе дополнительной информации? –

+0

Хотелось бы услышать, если у вас есть что сказать по этой теме, но, потратив некоторое время на изучение упомянутых вами моментов, я думаю, что сейчас я чувствую себя достаточно комфортно с этой темой, чтобы ответить на мой вопрос. Спасибо! –

+0

Я не знаком с продуктами, которые вы используете. Если веб-API и веб-приложение имеют разные идентификаторы доверенных сторон в вашей STS, вызов API с файлом cookie приложения может не сработать. CORS не является протоколом безопасности. Это способ обойти одну и ту же политику происхождения вашего браузера. Если вы хотите убедиться, что это безопасно, вы должны понимать используемые протоколы безопасности. – MvdD

1

Я согласен с user18044, поскольку он основан на атаке подделки на основе межсайтового запроса и безопасности между приложениями. Верно ли, что если пользователь X имеет доступ к приложению А, у них будет доступ к приложению B и наоборот? Если это не так, то каждое приложение нужно будет аутентифицировать отдельно ... и это не будет SSO. Я нашел эти ссылки, которые могут быть полезны в вашей ситуации.

https://stackoverflow.com/questions/5583460/how-to-implement-secure-single-sign-on-across-various-web-apps

https://developer.salesforce.com/page/Implementing_Single_Sign-On_Across_Multiple_Organizations

+0

Спасибо @ Ci-Ci Миллс Томсон. Наш архитектор утверждал, что в целях безопасности он хочет, чтобы всем пользователям приложения А был предоставлен некоторый уровень доступа к App B. –

Смежные вопросы