java - 使用 openid4java 进行 'login with google' 时验证失败

标签 java spring-mvc google-openid openid4java

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

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

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

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

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

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

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

其余代码实现如下

有一个 OpenIdController,其中 OpenIdService 是 Autowired 的。

OpenIdServiceImpl 实现 OpenIdService 并具有返回 ConsumerManager 实例的 getConsumerManager 方法。

在 OpenIdServiceImpl 的构造中,创建了 ConsumerManager 的实例。

创建提交表单并处理响应的操作写在 打开IdController并使用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 配置有关?

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

谢谢。

最佳答案

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

尚未尝试弄清楚它的作用,但希望这是解决问题的正确方法:)

关于java - 使用 openid4java 进行 'login with google' 时验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7645226/

相关文章:

java - 无法在 Spring Batch 中启动 Asyc 作业

jenkins - Gerrit 和 Jenkins 的 Google 身份验证

oauth-2.0 - 使用不同的 redirect_uri 和 openid.realm 参数从 Google OpenID 2.0 迁移到 OpenID Connect

openid - 如何使用正确的 Google OpenID 网址登录我的网站?

java - Spring MVC 如何解析和验证处理程序方法参数?

java - DocumentFilter 只允许将数字和句点 (.) 放入 JTextField 中?

java - 如何在 phpstorm(基于速度)文件模板中将字符串转换为驼峰式大小写?

java - 创建具有重复元素的列表

java - 如何在Java中连接二维数组

java - 即使您在内部使用类级别变量,使用@Autowired anno并且从不在bean上调用set方法是否可以提供线程安全性?