Ответ 1
Они будут прекрасно взаимодействовать, но вам нужно будет выполнить небольшую работу.
То, что я делал в прошлом, следующее:
Сначала я предполагаю, что у вас есть полуработающая реализация openid, то есть вы можете получить фактическую идентификацию от провайдера openid, но просто не знаете, что с ней делать.
Я продолжаю использовать FormsAuthentication как задний конец, даже не используя его для аутентификации.
Вам понадобится таблица базы данных, которая позволит связать пользователя FormsAuthentication с одним или несколькими openids. Вы можете просто сохранить имя пользователя FormsAuthentication (которого еще нет) с URL-адресом, который вы получаете от провайдера openid. Мы будем называть эту таблицу AUTH
Когда кто-то аутентифицируется на вашем сайте с помощью проверки openid, существует ли она в таблице AUTH. Если нет, вам нужно сделать две вещи. Вызовите Membership.CreateUser(), передавая любое сгенерированное имя пользователя, которое вы хотите (или адрес электронной почты, если он предоставлен openid). Я использую GUID для пароля, так как он не будет использоваться. В то же время поместите запись в таблицу AUTH, сопоставляя имя пользователя Membership с идентификатором, объявленным openid.
Когда кто-то аутентифицируется на вашем сайте с открытым идентификатором, и он уже существует, будет установлен метод FormsAuthentication.RedirectFromLoginPage с именем пользователя, связанным с openid и всеми соответствующими билетами проверки подлинности.
Теперь вы можете использовать все хорошие встроенные объекты безопасности, как всегда, до реализации openid.
EDIT: В качестве дополнительного преимущества этой настройки у вас есть возможность в будущем разрешить логин/пароль для входа в систему.
Вы также можете поменять свой членский член в любое время.
Кроме того, многозначность таблицы AUTH позволяет легко связывать несколько открытых объектов.