Применение пользовательских утверждений в приложении на основе утверждений - PullRequest
4 голосов
/ 07 сентября 2010

Я хотел бы предоставить разрешение на уровне документа на основе пользовательских утверждений на веб-сайте на основе утверждений. Пользователь может иметь сотни документов или один. Это хорошая идея для применения пользовательских требований? Какие плюсы или минусы? Существует ли ограничение на количество заявок, которые можно добавить в набор заявок?

Заранее спасибо за помощь.

1 Ответ

5 голосов
/ 10 сентября 2010

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

Вы можетепереопределите это, настроив WIF для использования «сеанса», а не «куки», но ... вы получаете все недостатки сеанса на стороне сервера (например, конфигурация для WebFarms, сходство и т. д.)

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

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

Как правило, самым большим преимуществом утверждения о «разрешении» является то, что администратору авторизации достаточно сложно написать:

if( PrincipalContainsDocumentClaim( documentYouAreTryingToOpen )
  ShowDocument(documentYouAreTryingToOpen );
else
  AccessDenied(documentYouAreTryingToOpen );

Я думаю, что лучший подход заключается ву вас есть менеджер авторизации, который может ответить на вопросы:

bool HasAccess( IPrincipal p, string document )

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

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

...