Что такое преимущество IPrincipal/IIdentity, а не пользовательский класс пользователя, который содержит необходимые вам свойства и использующий его для аутентификации/авторизации?В чем преимущество хранения пользователей в IPrincipal/IIdentity?
ответ
Очевидные преимущества заключаются в следующем: вся концепция аутентификации приложения & авторизация основана на принципалах и тождествах, выраженных как IPrincipal
/IIdentity
. Из-за этого встроенные механизмы чаще всего предполагают, что эти два используются. И если они используются, встроенные механизмы могут работать.
Возьмите веб-приложения, например. Пользователь HttpContext
на всю жизнь запроса выражается как IPrincipal
. Соглашаясь с этим соглашением, вы позволяете механизму авторизации правильно оценить, разрешен ли пользователю доступ к веб-ресурсам. Это связано с тем, что и модуль WebForms UrlAuthorization
, и атрибут MVC Authorization
предполагают, что принципал хранится стандартным способом.
В настольных приложениях у вас есть Thread
CurrentPrincipal
, который также является IPrincipal
.
Замена IPrincipal
/IIdentity
с собственными интерфейсами аутентификации/авторизации займет навсегда. Вам придется переписать большинство частей библиотеки базового класса, которые занимаются аутентификацией/авторизацией, а вместо встроенных интерфейсов вы будете полагаться на свою пользовательскую реализацию.
Но я не вижу никакого отношения между двумя заявлениями, которые вы представили. Вы спросили о преимуществе IPrincipal
над пользовательским классом. Но IPrincipal
- это просто интерфейс (!!), и ваш пользовательский класс может легко его реализовать. То же самое с IIdentity
. Затем вы можете разместить свои пользовательские классы везде, где ожидается IPrincipal
.
Это может быть немного сложно, например, в веб-приложениях вам придется заменить встроенные модули аутентификации, которые настроили IPrincipal
. Наиболее часто используются два: FormsAuthenticaiton
, который использует GenericPrincipal
/FormsIdentity
и SessionAuthenticationModule
, который использует ClaimsPrincipal
/ClaimsIdentity
. Ваш пользовательский модуль может, напротив, использовать любую пользовательскую реализацию, которую вы хотите.
«В настольных приложениях у вас есть CurrentTincipal Thread» - также в серверных приложениях. – Joe
@Joe: true. Я просто хотел привести несколько примеров, а не всю историю. –
Стандартные методы аутентификации, такие как Active Directory, Windows Identity Foundation и Windows, все используют IPrincipal
и IIdentity
. В принципе, если вы хотите использовать какой-либо из встроенных механизмов аутентификации, вы должны использовать эти классы. Как правило, у вас будет специальная схема базы данных для хранения информации о пользователе, и вы создадите объекты IPrincipal
и IIdentity
из этих данных, чтобы сделать аутентификацию.
- 1. В чем преимущество хранения ключевого значения?
- 2. В чем преимущество хранения строк таблицы в коллекции?
- 3. В чем преимущество mysqli_stmt_bind_result?
- 4. В чем преимущество imageNamed?
- 5. В чем преимущество WTP
- 6. В чем преимущество malloc?
- 7. В чем преимущество ViewHolder?
- 8. В чем преимущество PyTables?
- 9. В чем преимущество сохранения данных сеанса аутентификации пользователей hydautauths?
- 10. В чем преимущество Parrot VM для конечных пользователей?
- 11. В чем преимущество ~ и почему?
- 12. В чем преимущество варианта продукта?
- 13. В чем преимущество шаблонов JQuery
- 14. В чем преимущество использования DataRelation?
- 15. В чем преимущество использования toString()
- 16. В чем преимущество регулярного выражения?
- 17. В чем преимущество программного конвейера?
- 18. В чем преимущество «лямбда-выражений»?
- 19. В чем преимущество прекомпиляции ASP.NET?
- 20. В чем преимущество использования CGPath?
- 21. В чем преимущество использования итератора?
- 22. В чем преимущество использования str_getcsv?
- 23. В чем преимущество FileFilter/FilenameFilter
- 24. В чем преимущество концепции субдомена
- 25. В чем преимущество бросания исключения?
- 26. В чем преимущество аннотаций Ломбока?
- 27. В чем преимущество использования композиции?
- 28. В чем преимущество использования Flex?
- 29. В чем преимущество использования Animator.StringtoHash ("")?
- 30. В чем преимущество использования extend.js?
Это интерфейсы, вы не «храните пользователя» в интерфейсе. У них есть обычное преимущество интерфейсов, контракт, который не привязан к конкретной реализации. Полезно ли, чтобы ваш класс реализовал эти интерфейсы, немного сомнительно, но неясно из вопроса. –