Фон
У меня есть веб-приложение ASP.NET, которое взаимодействует с службами WCF. Веб-приложение и службы WCF находятся под моим контролем. В веб-приложении ASP.NET используется пользовательская реализация модели поставщика членства ASP.NET(с паролями, хранящимися в хешированной форме) для аутентификации пользователей, которые входят в веб-приложение. Как веб-приложение ASP.NET, так и службы WCF имеют доступ к одной и той же базе данных членства.
Поскольку пользователи будут предоставлять свой пароль только один раз, и я не хочу хранить их пароли в любом месте или раздражать их, повторно прося их пополнять свой пароль, мне нужен соответствующий механизм для аутентификации пользователей с помощью WCF услуги.
Основываясь на других вопросах и ответах, которые я видел, я рассматриваю подход "сеанса входа в систему", в котором пользовательский сеанс будет создан в базе данных пользовательского членства, когда пользователь первоначально войдет в веб-приложение, сеанс идентификации, идентифицированный GUID, и автоматически истекает после периода бездействия. GUID сеанса входа будет "запоминаться" веб-приложением для каждого зарегистрированного пользователя (либо сохраненного в билете проверки подлинности форм, либо в сеансе).
Служба WCF также предоставит свою собственную операцию входа в систему, принимающую имя пользователя и пароль и возвращающую GUID сеанса входа, как описано выше.
Служба WCF затем примет GUID сеанса входа для всех других операций и проверит, что GUID представляет действительный сеанс регистрации, который еще не истек, прежде чем разрешить операцию продолжить.
Я сделал довольно много фонового чтения на этом, и есть много материала о прямом использовании типа учетных данных клиента UserName, но для этого потребуется, чтобы веб-приложение запоминало пароль пользователя, что не кажется как отличная идея для меня.
Я провел некоторое исследование и нашел материал на MSDN, но это, похоже, требует больших усилий для реализации того, что (по крайней мере для меня) похоже на довольно распространенный сценарий использования.
Как создать пользовательский токен
Вопрос
Является ли общий подход "сеанса входа" описанным выше разумным?
Если да, то каков наилучший способ его достижения?
Если нет, можете ли вы предложить альтернативу?