Использование OpenID (через DotNetOpenAuth) вместе с ролями пользователей и другими функциями поставщика членства

Вы правы, никакого вреда не сделано, и быстрее выйти

. Для этого есть несколько причин:

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

Что касается возможности будущего использования кода, оправдывая определенность бессмысленных операций: это соображение, но это, возможно, не способ Agile . YAGNI!

29
задан Anas 19 August 2012 в 02:00
поделиться

1 ответ

Они будут хорошо взаимодействовать, но вам нужно будет немного поработать.

Что я делал в прошлом, так это:

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

Я продолжаю использовать FormsAuthentication в качестве серверной части, даже не используя ее для аутентификации.

Вам понадобится таблица базы данных, которая позволяет привязать пользователя FormsAuthentication к одному или нескольким openids. Вы можете просто сохранить имя пользователя FormsAuthentication (которое еще не существует) с идентификатором URL, который вы получаете от поставщика openid. Мы назовем эту таблицу AUTH

Когда кто-то аутентифицируется на вашем сайте с помощью openid, проверьте, существует ли он в таблице AUTH. Если нет, вам нужно сделать две вещи. Вызовите Membership.CreateUser (), передав любое сгенерированное имя пользователя (или адрес электронной почты, если он предоставлен openid). Я использую GUID для пароля, поскольку он не будет использоваться. В то же время поместите запись в таблицу AUTH, отображающую имя пользователя Членства в заявленную идентификационную информацию openid.

Когда кто-то аутентифицируется на вашем сайте с открытым идентификатором, и он уже существует, вызовите FormsAuthentication.RedirectFromLoginPage с именем пользователя, связанным с openid, и все соответствующие билеты для аутентификации будут установлены.

Теперь вы можете использовать все красивые встроенные объекты безопасности, как всегда, до реализации openid.

РЕДАКТИРОВАТЬ: В качестве дополнительного преимущества этой настройки у вас есть возможность в будущем разрешить вход в систему по имени пользователя / паролю.

Вы также можете поменять поставщика услуг в любое время.

Кроме того, многозначный характер таблицы AUTH позволяет легко связать несколько открытых элементов.

40
ответ дан Jeffrey Blake 19 August 2012 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: