Предоставление новым пользователям нескольких доверенных STS

При использовании Windows Identity Foundation (WIF) с несколькими службами токенов безопасности (STS) можно ли подготовить пользователей до того, как они впервые получат доступ к приложению?

Например, предположим, что у меня есть веб-сайт BufferOverrun, где пользователи могут входить в систему и задавать / отвечать на вопросы, и я хочу поддерживать аутентификацию с помощью внешних учетных записей Google. Когда пользователь впервые обращается к странице, он должен пройти аутентификацию с помощью своей учетной записи Google, после чего он сможет получить доступ к веб-приложению. В этом сценарии есть два STS: Google (для аутентификации личности) и пользовательский для моего приложения (для авторизации).

Как я могу назначить заявки пользователю до того, как этот пользователь получит доступ к системе?

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

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

Я вижу несколько проблем как с 1, так и с 2. Для 1 все пользователи имеют некоторый неявный доступ к системе, даже если утверждения приложения по умолчанию не разрешают никаких функций. Кажется, это отлично работает для чего-то вроде stackoverflow, где исходная учетная запись имеет определенный набор разрешений, и когда пользователь использует системы, предоставляются новые заявки. Однако это, вероятно, желательно не для всех приложений. 2 подвержен ошибкам, так как требует, чтобы администратор вручную указывал претензию.

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

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

Исторически (сейчас я имею в виду существующее приложение) приложение специально взаимодействовало только с Active Directory. Это было решено с помощью встроенной учетной записи администратора (не связанной с AD), которая позволяла пользователю с правами администратора выполнить первый вход. После аутентификации с помощью приложения администратора этот пользователь может искать в AD пользователей / группы и предоставлять их индивидуально. Любой пользователь / группа, не предоставленная администратором, вообще не будет иметь доступа к системе. Я не думаю, что эта парадигма применима к использованию внешней STS, такой как Google и т. Д., Поэтому я пытаюсь создать архитектуру, которая позволила бы использовать внешние STS-системы. Желательно, но не обязательно, сохранить возможность поиска в STS. На практике обе задействованные службы STS, скорее всего, будут Active Directory, использующими федеративные службы.

Примечание. Это похоже на этот вопрос и этот вопрос.


person Travis    schedule 02.05.2011    source источник


Ответы (1)


При использовании Windows Identity Foundation (WIF) с несколькими службами токенов безопасности (STS) можно ли подготовить пользователей до того, как они впервые получат доступ к приложению?

Ответ - да, если у вас есть способ идентифицировать этих пользователей (например, их электронную почту)

В этом сценарии есть две STS: Google (для аутентификации личности) и пользовательский для моего приложения (для авторизации).

Это часто используется, но не обязательно всегда. Если вы полагаетесь только на Google, вы можете просто иметь код авторизации в самом приложении (например, классы «AuthorizationManager» и т. Д.). Ценность другого STS заключается в том, что он может быть брокером для нескольких удостоверений (например, Google, LiveID, Yahoo !, что угодно) и, вы можете выполнять некоторые преобразования, связанные с авторизацией.

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

Почему нет? Вы можете определить правило, которое гласит:

«Любой, кто аутентифицирован в Google, является« читателем »в App BufferOverrun». Вы даже можете сказать:

«[email protected] является« читателем »на BufferOverrun», прежде чем кто-то получит доступ к приложению.

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

Взгляните на образец «Федерация с несколькими партнерами и ACS» (образец 7) на странице http://claimsid.codeplex.com Мы именно так и поступаем.

person Eugenio Pace    schedule 10.05.2011
comment
Электронная почта - единственный распространенный способ сделать это? Я предполагаю, что вам нужно будет использовать утверждение, которое является общим для всех поддерживаемых провайдеров STS - электронная почта кажется хорошим выбором. При этом одна проблема с использованием электронной почты заключается в том, что вы должны предоставлять каждого пользователя отдельно. Сравните это с AD, где вы можете подготовить группу и управлять добавлением пользователей в эту группу извне. Эквивалент, который вы предлагаете выше, заключается в том, что любой, кто использует конкретный STS, считается тем же уровнем полномочий - мне это кажется странным. - person Travis; 11.05.2011
comment
Приложение будет иметь несколько уровней разрешений / авторизации, связанных с ним, и все пользователи, скорее всего, в конечном итоге будут идентифицированы с одной и той же STS (ADFS2.0). Мне нужно иметь возможность группировать пользователей / назначать пользователям роли. Еще один недостаток электронной почты заключается в том, что мне приходится вручную вводить электронную почту, которая подвержена ошибкам. - person Travis; 11.05.2011
comment
Если все пользователи находятся в AD, вы можете просто оформить групповое заявление (в ADFS). Google выдает вам только электронную почту и заявки на уникальный идентификатор, поэтому вам в любом случае придется пройти этап регистрации / подготовки. - person Eugenio Pace; 11.05.2011
comment
Хм. Таким образом, в том же духе я мог либо предварительно подготовить группу по имени (например, по электронной почте выше), либо дождаться, пока кто-нибудь подключится и сохранит заявленные группы; затем добавьте привилегии в приложении «админ». Имеет смысл. - person Travis; 11.05.2011