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