Kerberos, делегирование и как это правильно сделать? - PullRequest
10 голосов
/ 22 октября 2009

У меня есть два отдельных самодельных приложения, которые должны общаться между собой. Одним из них является интерфейсное приложение (на самом деле asp.net), а другим - бэкэнд-интерфейс для бухгалтерского приложения. Внутренний интерфейс не был создан специально для этого интерфейса - это универсальный интерфейс, который многие другие приложения используют для интеграции с нашим продуктом.

Для удобства пользователей мы хотим обеспечить проверку подлинности Windows в нашем веб-приложении. Это означает, однако, что нам нужно передать учетные данные бэкэнд-приложению, которое должно их проверить.

Мы не хотим настраивать наш интерфейс как «доверенное» приложение для сервера, которое может аутентифицировать себя как любой пользователь. В случае взлома внешнего интерфейса это также может поставить под угрозу внутреннюю систему.

Насколько я понимаю, одним из способов сделать это с помощью аутентификации Windows является делегирование Kerberos. Однако для этого необходимо явно включить пользователя, которому необходимо делегировать, и машину, которая выполняет делегирование (сервер с нашим внешним интерфейсом). По умолчанию эти параметры отключены в Active Directory, и я подозреваю, что многие системные администраторы будут иметь резервирование для включения их для всех своих пользователей.

Кроме того, я не совсем уверен, что именно для этого и была предназначена делегация Kerberos. Мне не нужен наш интерфейс, чтобы выдавать себя за пользователя, который подключается. Мне просто нужно доказать, что этот пользователь аутентифицировался для меня.

Как бы вы это сделали?

Ответы [ 3 ]

8 голосов
/ 01 октября 2013

Мне непонятно, что вы можете и не можете сделать со своим вариантом использования, но я могу ответить на вопрос для чего предназначалась делегация Kerberos.

Сначала поговорим о том, что делает Kerberos до делегирования. Важно хорошо понимать эту часть, потому что она неуловима.

Kerberos проверяет подлинность ОБА концов связи между двумя конечными точками в сети, эти конечные точки могут быть интерактивными пользователями или службами, работающими на компьютере.

Это строгая аутентификация , поэтому она не допускает атаку "человек посередине" в любой форме. При правильной настройке конечная точка может гарантировать, что они не будут скомпрометированы. На уровне имени службы (если вы подключаетесь к II на компьютере, это отличается от подключения к SQL Server на том же компьютере). Он интенсивно использует современные методы шифрования и требует использования безопасных сертификатов. Детали протокола аутентификации сложны и не стоит вдаваться в подробности, но он включает в себя около 20 различных отдельных этапов подтверждения между двумя конечными точками аутентификации и сервером аутентификации (в окнах контроллер домена является сервером аутентификации).

Так какого чёрта это делегирование?

Делегирование - это расширение Microsoft к стандарту Kerberos, которое позволяет доверенному источнику продолжить аутентификацию для другого оконечный.

Это позволяет вам действовать как «человек посередине» - однако многие параметры должны быть явно настроены, установлены сертификаты и т. Д., Чтобы это работало. Это далеко не просто. (РЕДАКТИРОВАТЬ: Вот еще один SO ответ на детали - https://stackoverflow.com/a/954154/215752)

Так, например, вы можете попросить кого-нибудь пройти аутентификацию на веб-сайте, а затем подключить код .NET к SQL Server КАК ТО ЖЕ ПОЛЬЗОВАТЕЛЬ для чтения данных с правами этого пользователя.


Теперь, чтобы ответить на ваш вопрос, поскольку я не уверен, что вы хотите сделать, я предлагаю три варианта:

1) Вы хотите подключиться к бэкэнд-системе как тот же пользователь, что и пользователь, аутентифицирующийся на сайте.

  • В этом случае делегирование Kerberos идеально - оно делает именно то, что вы хотите.

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

  • В этом случае вы не хотите делегировать. Kerberos для веб-сайта и Kerberos (как другой пользователь) для серверной части будут отлично работать.

3) Вы хотите подключаться к серверной системе как один и тот же пользователь, а иногда как другой пользователь. (Например, вам нужно подтвердить, что это законный пользователь для серверной системы, но в другое время вы хотите выполнять доверенные действия в качестве системной учетной записи. Это (по моему опыту) наиболее распространенный вариант использования.)

  • В этом случае вы используете оба. Делегирование для соединений, которые должны подтвердить личность пользователя, а затем вернуться к идентификатору учетной записи службы для тех случаев, когда вам необходим системный доступ к серверной части. (Мой предыдущий вопрос касался подробностей о том, как вернуться к идентификатору системы на платформе .NET, см. Как «отменить олицетворение» (без делегирования?) В Kerberos .)
0 голосов
/ 06 августа 2012

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

Один из возможных способов взлома состоит в том, чтобы интерфейсный пользователь просто отправлял пользователю и время аутентификации, но внутренний интерфейс мог запрашивать журналы событий Active Directory, чтобы определить, прошел ли этот пользователь аутентификацию во внешнем интерфейсе. Для этого необходимо использовать WIndows Event Log API.и также поиграть с настройками Event Log в AD, чтобы зарегистрировать проблему билетов службы. (Мое воспоминание о том, что это по умолчанию) -

0 голосов
/ 22 октября 2009

Вот пост, описывающий, как работает Kerberos и как его настроить.

ASP.NET, передавая учетные данные аутентификации Windows

...