1

spring-mvcアプリケーションで「loginwithgoogle」機能を実装するためにopenid4javaライブラリを使用しています。

ローカルのTomcatサーバーでは正常に動作しますが、リモートサーバーでは突然動作を停止しました。それ以前も問題なく動作していました。

catalina.outにログインした後、グーグルがリターンURLにリダイレクトした後、応答の検証が失敗することがわかりました

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

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

リモートサーバーでは、verifiedの値はnullです。ローカルサーバーでは、そのURI

応答を処理している間、ConsumerManagerは認証要求を行うために使用されるのと同じインスタンスである必要があることを認識しています。

残りのコードは次のように実装されます

OpenIdServiceが自動配線されているOpenIdControllerがあります。

OpenIdServiceImplはOpenIdServiceを実装し、consumerManagerインスタンスを返すgetConsumerManagerメソッドを備えています。

OpenIdServiceImplの構成では、ConsumerManagerのインスタンスが作成されます。

送信用のフォームを作成し、応答を処理するアクションは、OpenIdControllerに書き込まれ、getConsumerManagerメソッドを使用してconsumerManagerインスタンスにアクセスします。

編集:

フォームを送信する前にディスカバリー情報をログに記録してみましたが、ここにコールバックすると出力されます

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構成と関係がありますか?

どんな助けでも大歓迎です。必要に応じてコードを投稿できます。

ありがとう。

4

1 に答える 1

1

ConsumerManagerのインスタンスを作成した後、次の行を追加することで、この問題を解決できます。

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

ここのSampleConsumerの例へのコメントの1つでそれが言及されていることがわかりました-http://code.google.com/p/openid4java/wiki/SampleConsumer

下からの応答#3を参照してください。

それが何をするのかまだ理解しようとはしていませんが、それを解決する正しい方法を望んでいます:)

于 2011-10-06T15:19:02.367 に答える