使用openid4java进行“使用google登录”时验证失败

时间:2011-10-04 08:35:56

标签: java spring-mvc google-openid openid4java

我正在使用openid4java库在spring-mvc应用程序中实现“使用google登录”功能。

它在我的本地tomcat服务器上工作正常,但在远程服务器上突然停止工作。它之前的工作正常。

在catalina.out中进行了一些登录后,我发现在谷歌重定向到返回网址后,响应验证失败

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

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

远程服务器上已验证的值为null。在本地服务器上它是一个uri

我知道在处理响应时,ConsumerManager需要是相同的 用于放置身份验证请求的实例。

其余代码实现如下

有一个OpenIdController,其中OpenIdService是Autowired。

OpenIdServiceImpl实现OpenIdService并具有getConsumerManager方法,该方法返回consumerManager实例。

在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配置有关?

感谢任何帮助。如果需要,我可以发布代码。

感谢。

1 个答案:

答案 0 :(得分:1)

我可以在创建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。

尚未尝试弄清楚它的作用,但希望以正确的方式解决它:)