【发布时间】:2014-02-21 22:23:18
【问题描述】:
我目前正在我的网络应用程序中实现 Reddit OAuth2 登录。握手和令牌交换在本地测试时工作正常,但在服务器上运行时(托管在“OpenShift”DIY 盒式磁带上)我收到以下错误:
java.security.InvalidAlgorithmParameterException: Prime size must be
multiple of 64, and can only range from 512 to 1024 (inclusive)
结果是什么
java.lang.RuntimeException: Could not generate DH keypair
我大部分时间都在搜索,发现了不同的解决方案,从更改 Java 版本到使用 BouncyCastle。但是,我正在使用Scribe 库,所以我认为如果不分叉和更改 scribe 的基础,我就无法实现 BouncyCastle,这违背了它的目的。
安装JCE Unlimited Strength 也出现了,但我无法在 OpenShift 上执行此操作,因为没有 root 访问权限(也许可以让他们的团队中的一个来执行此操作)。
使用的java版本为(取自java -version):
本地测试机:
java version "1.7.0_51"
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-1ubuntu1)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
OpenShift 服务器:
java version "1.7.0_51"
OpenJDK Runtime Environment (rhel-2.4.4.1.el6_5-i386 u51-b02)
OpenJDK Server VM (build 24.45-b08, mixed mode)
我不知道该怎么做才能解决这个问题。希望我是愚蠢的或误解了什么,所以任何可能的解决方案都会很棒!
--
编辑 1
返回错误的请求代码(使用 Scribe,正如我所提到的,因此可能没有多大用处)。令牌端点是 https://ssl.reddit.com/api/v1/access_token 使用 POST。正如我上面所说,这适用于我的测试机器。
OAuthRequest request = new OAuthRequest(getAccessTokenVerb(), getAccessTokenEndpoint());
request.addHeader("Authorization", "Basic"
+Base64.encode((config.getApiKey()+":"+config.getApiSecret()).getBytes()));
request.addBodyParameter("state", "none");
request.addBodyParameter(OAuthConstants.SCOPE, config.getScope());
request.addBodyParameter(OAuthConstants.CLIENT_ID, config.getApiKey());
request.addBodyParameter(OAuthConstants.REDIRECT_URI, config.getCallback());
request.addBodyParameter(OAuthConstants.CODE, verifier.getValue());
request.addBodyParameter("grant_type", "authorization_code");
Response response = request.send(); // Errors here from Request.createConnection in the Scribe code
return getAccessTokenExtractor().extract(response.getBody());
【问题讨论】:
-
您能否发布您用于生成密钥对的代码,以便我们对其进行测试?
标签: java ssl oauth-2.0 openshift scribe