Ошибка проверки при использовании openid4java для входа в систему с помощью Google - PullRequest
1 голос
/ 04 октября 2011

Я использую библиотеку openid4java для реализации функции 'login with google' в приложении spring-mvc.

Он отлично работает на моем локальном сервере Tomcat, но на удаленном сервере он внезапно перестал работать. До этого там тоже все работало нормально.

После некоторого входа в catalina.out я обнаружил, что проверка ответа не проходит после того, как Google перенаправляет на возвращаемый URL

VerificationResult verification = openIdService.getConsumerManager().verify(
                      receivingURL.toString(),
                      response, discovered);

Identifier verified = verification.getVerifiedId(); //Null

Значение проверено на удаленном сервере пусто. На локальном сервере его URI

Мне известно, что при обработке ответа ConsumerManager должен быть таким же экземпляр, используемый для размещения запроса аутентификации.

Остальная часть кода реализована следующим образом

Существует OpenIdController, в котором OpenIdService автоматически подключается.

OpenIdServiceImpl реализует OpenIdService и имеет метод getConsumerManager, который возвращает экземпляр consumerManager.

В конструкции OpenIdServiceImpl создается экземпляр ConsumerManager.

Действия, которые создают форму для отправки и обрабатывают ответ, записаны в Откройте OpenIdController и получите доступ к экземпляру consumerManager, используя метод getConsumerManager.

Редактировать:

Я попытался записать информацию Discovery перед отправкой формы и при обратном вызове здесь вывод

Debugging OpenId: Discovered (before) OpenID2
OP-endpoint:https://www.google.com/accounts/o8/ud
ClaimedID:null
Delegate:null
Debugging OpenId: Discovered (after) OpenID2
OP-endpoint:https://www.google.com/accounts/o8/ud
ClaimedID:null
Delegate:nul

Я что-то здесь не так делаю? Но это работает на локальном сервере!

Или что-то связанное с настройкой tomcat на удаленном сервере?

Любая помощь приветствуется. Я могу опубликовать код, если требуется.

Спасибо.

1 Ответ

1 голос
/ 06 октября 2011

Я мог бы решить эту проблему, добавив следующие строки после создания экземпляра ConsumerManager.

consumerManager.setAssociations(new InMemoryConsumerAssociationStore()); 
consumerManager.setNonceVerifier(new InMemoryNonceVerifier(5000)); 
consumerManager.setMinAssocSessEnc(AssociationSessionType.DH_SHA256);

Я обнаружил, что упомянул об этом в одном из комментариев к примеру SampleConsumer здесь - http://code.google.com/p/openid4java/wiki/SampleConsumer

см. Ответ № 3 снизу.

Еще не пытался понять, что он делает, но надеюсь, что это правильный путь для его решения:)

...