Управление сеансом и связывание учетных записей пользователей с OpenID в ASP.NET

В настоящее время я играю с DotNetOpenAuth, чтобы веб-сайт ASP.NET (C #) использовал OpenID вместо обычного входа в систему -программа пароля для пользователя и обработки сеанса.

До сих пор я добавил DotNetOpenAuth.dll в свой проект и попробовал тестовую страницу входа со следующим:

<rp:OpenIdLogin ID="OpenIdLogin1" runat="server" />

Когда я запускаю страницу, я ввожу действительный URL-адрес myopenid, и веб-сайт перенаправляется на страницу myopenid, где я ввожу свой пароль, и в случае успеха он возвращается обратно на мой default.aspx из-за следующего в моем web.config:

<authentication mode="Forms">
    <forms defaultUrl="/Default.aspx" loginUrl="~/Login.aspx"/>
</authentication> 

Теперь, когда пользователь "вошел в систему", как можно обработать мой сеанс? На данный момент я не знаю, как я могу, например, проверить, активен ли сеанс, или как завершить сеанс.

Мой основной вопрос: как я могу управлять сеансом после аутентификации пользователя с помощью OpenID?


[Обновление]

Теперь я использую следующее для проверки аутентификации: HttpContext.Current.User, и теперь я могу проверить, аутентифицирован ли пользователь в сеансе.

Есть ли способ «связать» данные пользователя, хранящиеся в моей базе данных, с учетной записью openid?


person Andreas Grech    schedule 08.03.2010    source источник


Ответы (1)


Вход в систему OpenID с элементом управления OpenIdLogin (по умолчанию) не отличается от входа в систему по имени пользователя и паролю с точки зрения ASP.NET. Как вы обнаружили, HttpContext.Current.User устанавливается для каждого входящего HTTP-запроса на основе HTTP-файла cookie, который ASP.NET FormsAuthentication отправляет в браузер, чтобы поддерживать согласованность сеанса от запроса к запросу. Пока вы находитесь на странице или в ее коде программной части, свойство Page.User является еще более удобным средством.

Но если вы выполняете контроль доступа, а не проверяете, есть ли вошедший в систему пользователь на каждой странице, лучше всего использовать тег <authorization> в вашем файле web.config, чтобы заставить пользователя войти в систему перед доступом к определенным страницам или каталогам страниц.

Что касается связывания сведений о пользователях, ключ, который вы хотите связать с данными пользователей, - это заявленный идентификатор OpenID, который OpenIdLogin автоматически присваивает значению имени пользователя для FormsAuthentication. Таким образом, вы можете извлекать или сохранять данные о пользователях в своей базе данных на основе значения HttpContext.Current.User.Identity.Name, которое будет надежным и доказанным уникальным значением для каждого пользователя.

person Andrew Arnott    schedule 08.03.2010