2014-01-26 4 views
2

Сегодня, без каких-либо изменений на моем реальном сайте, вход в систему с внешним логином Google нарушил работу. Это происходит только для пользователей, у которых есть логин google, другие провайдеры в порядке. Это также происходит только на реальном сайте, моя машина Dev, работающая с отладочной версией того же кода, прекрасна.AuthenticationResult.IsSuccessful начал возвращать false для google

Мой код похож на пример MVC приложение с:

public ActionResult ExternalLoginCallback(string returnUrl) 
{ 
    ... 
    AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action( "ExternalLoginCallback", new { ReturnUrl = returnUrl })); 
    if(!result.IsSuccessful) 
    { 
     return RedirectToAction("ExternalLoginFailure"); 
    } 
} 

Я смотрел на result.error, который пуст.

Что-то изменилось, о чем я должен знать? Я вижу аналогичный вопрос с 4 января here. Я предполагаю, что это как-то связано с моей реализацией, а не с общей проблемой, потому что я все еще могу войти в SO, который использует мой открытый идентификатор google.

Я использую Log4Net и получаю журналы DotNetOpenAuth, но ошибок там нет, поэтому он отличается от этого answer.

Я пробовал модернизировать с 4.3.0.13117 до последнего Nuget (4.3.4.13329), но это не повлияло. Я также не могу найти тег для источника 4.3.4.13329 in the repository. Я попытаюсь загрузить и построить 4.3.0.13117, чтобы узнать, могу ли я найти причину. Единственная проблема заключается в том, что это работает на тонком тестировании на моем локальном компьютере, и я не уверен, что хочу разместить отладочные DLL на сайте.

ответ

2

Ну, это было несколько недель, поэтому я подумал, что буду документировать шаги, которые я предпринял, чтобы решить эту проблему, если это поможет кому-то другому. В качестве справочной информации я использую Visual Studio 2012.

  1. Обнаружено, что OpenID 2.0 + OAuth 1.0 устарел. См. here. Служба не была прекращена, но я был обеспокоен тем, что я видел некоторое ухудшение служения, поскольку это сейчас устаревший подход.
  2. Обновлено с MVC4 до MVC5. См. here.
  3. Использовал библиотеку DotNetOpenAuth.GoogleOAuth2. См. here.
  4. Преобразовал мой сайт в https. См. here и here.

Теперь, когда я сделал это, все работает нормально.

+0

Клиент Google в MVC4 является OpenID, а не OAuth. Даже если OAuth1 устарел, OpenID в MVC4 должен работать нормально. Также в MVC5 клиент Google использует OpenID. Я столкнулся с одной и той же проблемой, хотя и не повседневной, иногда она возникает. Я не могу перенести MVC4 в MVC5 сейчас. – user2585299

+0

@ пользователь2585299. Проблемы были также прерывистыми для меня, но в один прекрасный день вряд ли кто-либо из пользователей Google смог бы войти в систему. Если вы обнаружите первопричину или более легкое решение, пожалуйста, напишите здесь, и я приму это, потому что это спасло бы меня много времени. – acarlon

+0

@ user2585299 - Вы также можете посмотреть уведомление об отступлении Open ID 2.0 от Google здесь: https://developers.google.com/accounts/docs/OpenID – acarlon