1

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

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

在 catalina.out 进行一些登录后,我发现在 google 重定向到返回 url 后,响应的验证失败

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

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

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

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

其余代码实现如下

有一个 OpenIdController,其中 OpenIdService 是自动装配的。

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 示例的评论之一中提到了它 - http://code.google.com/p/openid4java/wiki/SampleConsumer

请参阅底部的响应#3。

还没有试图弄清楚它的作用,但希望它是解决它的正确方法:)

于 2011-10-06T15:19:02.367 回答