2009-07-24 1 views
1

Я добавляю в систему дополнительную аутентификацию OpenID. Все работает нормально с DotNETOpenID. Тем не менее, я получаю вопрос, когда:DotNetOpenId - Сбой при попытке воспроизведения с программными и веб-входами

  1. входа пользователя в вебе-приложение, используя стандартный логин (FormsAutentication)
  2. единомышленников пользователей некоторых OpenID с учетной записью (мы используем программный вход по OpenID здесь, чтобы получить заявленную идентичность)
  3. Пользователь выходит из формы FormsAuthentication и регистрируется снова с помощью OpenID (используя элемент управления Login).

На последнем шаге мы получаем ошибку атаки повтора. Я подозреваю, что OpenID сохраняет некоторую информацию в хранилище приложений (которая будет использоваться для запросов), которая используется для получения предыдущего запроса, вместо того, чтобы начинать новый.

Может ли кто-нибудь помочь пролить свет на проблему здесь?

Если проблема в том, как я ее понял, как я могу очистить эту конкретную информацию о состоянии после успешного связывания OpenID с учетной записью, используя программный логин (учитывая, что у меня есть успешный запрос под рукой)?

+1

Прежде всего, на ваших этапах воспроизведения вы упомянули, что пользователь входит в систему с вашим программным логином, а затем вступает в систему с помощью элемента управления Login. Итак, эти две разные страницы входа, одна программная и одна с помощью элемента управления OpenIdLogin? Или это одна и та же программная страница входа в систему? Я не уверен, что это важно, но я просто хотел получить четкую картину в моей голове вашего сценария. –

+0

Привет, Андрей, спасибо за библиотеку и за ответ! 1. URL абсолютно чистый, тестируемый провайдер - это Google. 2. Существует только одна страница входа в систему (которая использует аутентификацию входа/выхода или Open ID Logon). У проверенных пользователей есть доступ к странице ассоциации, где они могут связывать некоторые OpenID с текущей учетной записью. Это связывание происходит, выполняя программный запрос OpenID против его провайдера и сохраняя заявленный идентификатор Url в репозитории сохранения. Это имеет какое-то значение для вас? –

+0

Опечатка: «против провайдера» –

ответ

0

Хорошо, проблема, похоже, исчезла после добавления Session.Abandon() (и очистки логики авторизации немного) между моментом первого назначения OpenID и фактической аутентификацией с ним.

2

Какой провайдер вы тестируете? Честно говоря, это звучит как наиболее вероятная виновная сторона в этом случае, так как она составляет значение openid.response_nonce. Другое вероятное место для поиска - вы (случайно) поддерживаете все параметры openid. * Querystring в URL-адресе между первым и вторым входами? Например, на второй странице входа перед тем, как пользователь вводит свой OpenID, являются ли их параметры openid. * В URL-адресе страницы? Если это так, вероятно, проблема, и это может быть исправлено вашей программной страницей, что приводит к чистой перенаправлению, чтобы избавиться от них после попытки входа в систему.

Смежные вопросы