我正在使用openid4java库在一个spring-mvc应用程序中实现“使用谷歌登录”功能。
它在我的本地tomcat服务器上运行良好,但在远程服务器上突然停止工作。在此之前,它也运行得很好。
在catalina.out中做了一些登录之后,我发现google重定向到返回的url后,对响应的验证失败了。
VerificationResult verification = openIdService.getConsumerManager().verify(
receivingURL.toString(),
response, discovered);
Identifier verified = verification.getVerifiedId(); //Null远程服务器上的verified的值为null。在本地服务器上,它是一个uri
我知道在处理响应时,ConsumerManager需要与发出身份验证请求的实例相同。
代码的其余部分实现如下
有一个OpenIdController,其中的OpenIdService是自动连接的。
OpenIdServiceImpl实现了OpenIdService,并具有返回consumerManager实例的getConsumerManager方法。
在OpenIdServiceImpl的构造中,创建了ConsumerManager的一个实例。
创建用于提交的表单和处理响应的操作是在OpenIdController中编写的,并使用getConsumerManager方法访问consumerManager实例。
编辑:
我尝试在表单提交之前记录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配置有关?
任何帮助都是非常感谢的。如果需要,我可以发布代码。
谢谢。
发布于 2011-10-06 23:19:02
我可以通过在创建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。
我还没有尝试弄清楚它是做什么的,但希望这是解决它的正确方法:)
https://stackoverflow.com/questions/7645226
复制相似问题