2011-10-04 119 views
1

我正在使用openid4java库在spring-mvc应用程序中实现'使用google登录'功能。使用openid4java进行'使用google登录'时验证失败

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

在catalina.out中做一些记录后,我发现,谷歌重定向到返回URL

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

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

的验证值是在远程服务器上的空后的反应的验证失败。在本地服务器上它的一个URI

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

的代码的其余部分如下

有一个OpenIdController其中OpenIdService是自动装配Autowired被实现。

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

任何帮助表示赞赏。如果需要,我可以发布代码。

谢谢。

+0

你确定你提供DiscoveryInformation'您关联期间得到了_same_'? (我假设没有'verify(...)'抛出异常) – Osw

+0

我已经编辑了DiscoveryInformation日志输出的问题。谢谢 – naiquevin

回答

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从底部。

还没有尝试找出它做什么,而是希望其正确的方式来解决它:)