Вы, наверное, уже решали это раньше.
Мне нужно иметь возможность использовать открытый идентификатор в среде, в которой нет привязки к сеансу. Серверы сохраняют заголовки.
Я использую ASP.NET MVC и dotNetOpenId версии 3.2.0.9177. Хотя аутентификация на стороннем веб-сайте проходит без сучка и задоринки, при возврате ответа я получаю сообщение об ошибке, и аутентификация не выполняется.
Любые мысли?
3 ответа
С отслеживанием состояния
Наиболее оптимизированный метод - написать собственное хранилище сохраняемости, которое реализует IRelyingPartyApplicationStore
для "секретов", требуемых RP OpenID, и передать ваш экземпляр конструктору OpenIdRelyingParty(IRelyingPartyApplicationStore)
или зарегистрировать его в вашем файл web.config.
Без гражданства
Гораздо более простое решение, которого будет достаточно для большинства сценариев, - это использовать вместо этого режим без сохранения состояния, чтобы не было необходимости совместно использовать состояние между серверами вашей веб-фермы.
Вы можете активировать режим без сохранения состояния, создав экземпляр OpenIdRelyingParty
, передав null
в качестве экземпляра магазина приложений. Вызов конструктора по умолчанию заставит DNOA использовать свое хранилище в памяти, которое не работает на фермах серверов, поэтому конструктора по умолчанию недостаточно.
Или, если вы используете элементы управления ASP.NET, просто установите для элемента управления Stateless = true
.
Вот как мы включаем режим без сохранения состояния:
var uri = new Uri(Request.Url, Request.RawUrl);
var openid = new OpenIdRelyingParty(null, uri,
Request.HttpMethod == "GET" ? Request.QueryString : Request.Form);
Кажется, пока работает, хотя, по словам Эндрю, есть небольшое снижение производительности. Не уверен, что это имеет значение, поскольку вход в систему - довольно редкое действие.
Используя DotNetOpenID, вы должны иметь возможность сохранять необходимое состояние во время аутентификации для клиента с помощью файла cookie.
Изменить: у меня нет примера кода для этого, потому что мне никогда не приходилось использовать DotNetOpenID в среде без сеанса, но я бы проверил эту ссылку, она может предоставить вам необходимую информацию : http://code.google.com/p/dotnetopenid/wiki/WebFarmHowto а>
Похожие вопросы
Связанные вопросы
Новые вопросы
asp.net-mvc
ASP.NET MVC Framework - это платформа и инструмент веб-приложений с открытым исходным кодом, которые реализуют версию шаблона модель-представление-контроллер (MVC), адаптированную к веб-приложениям и построенную на основе технологии ASP.NET.