Почему бы просто не использовать двух разных провайдеров членства (Windows и Forms, вместо того, чтобы использовать LogonUserIdentify специально)? В приведенном вами примере кода вы можете использовать один и тот же метод в пространстве имен Membership для любого поставщика. Вы можете изменить, какой поставщик является по умолчанию в файле Web.config. Я согласен, что использование кода, специфичного для «интегрированной аутентификации», не является чистым. Вот пример:
<membership defaultProvider="1">
<providers>
<clear/>
<add name="1" ... />
<add name="2" ... />
</providers>
</membership>
Затем измените defaultProvider. Элементы управления ASP.NET, относящиеся к членству (например, элемент управления входом в систему), имеют свойство, позволяющее выбрать поставщика членства, что означает, что вы можете выбрать одного из них программно.
Идентификатор пользователя имеет значение только в контексте провайдера, поэтому использование «внутреннего» имени пользователя кажется ненужным - используйте имя провайдера и внешний идентификатор пользователя (поскольку один и тот же идентификатор пользователя может существовать в нескольких провайдерах ) в вашем собственном хранилище данных.
Обычно нет необходимости создавать свои собственные идентификаторы пользователей, поскольку провайдеры ASP.NET позаботятся об этом за кулисами. Например, если вы используете поставщика профилей ASP.NET, у вас будет информация о профиле пользователя, независимо от того, какой поставщик членства использовался для аутентификации пользователя.