我正在使用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配置有关?
感谢任何帮助。如果需要,我可以发布代码。
感谢。
答案 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。
尚未尝试弄清楚它的作用,但希望以正确的方式解决它:)