Java库生成Oauth1.0a签名

时间:2016-07-20 20:14:52

标签: java oauth apache-httpclient-4.x scribe

我对Oauth很新,但需要学习如何在Java中完成它,以便我们可以验证REST请求。这是我到目前为止所做的。

经过一番阅读后,我决定尝试ScribeJava。我创建了一个实现DefaultApi10a的自定义API并指向我们的端点。我设置了这样的服务:

final OAuth10aService service = new ServiceBuilder()
      .apiKey("key")
      .apiSecret("secret")
      .build(TestApi.instance());

这不起作用。在进行了大量挖掘之后,似乎因为我们使用的是自签名证书,我无法访问远程主机。我收到一个错误,说连接到远程服务时出现问题。 ScribeJava似乎没有办法禁用使用自签名证书的验证。

由于我们希望能够使用请求上的授权标头进行身份验证,我将如何使用Java库生成标头部分?我环顾四周,找不到任何东西。

作为参考,我们使用Python成功地使用Python做了很好的Oauth REST调用:

headeroauth = OAuth1(Oauth1Key, Oauth1Secret,
                 signature_type='auth_header')

myResponse = requests.get("endpoint_here", auth=headeroauth, verify=False)

关于如何使用Java完成同样的事情的任何输入?

2 个答案:

答案 0 :(得分:4)

我想用很多库来创建OAUTH登录。但在我看来,最简单的是JWT(Json Web Token)。您可以在此处找到使用说明:

https://github.com/auth0/java-jwt

基本上你要做的就是按照以下三个步骤作为登录流程:

1)当用户尝试登录时,验证他的用户名和密码,如果成功,则生成一个JWT签名,其中密钥存储在您的后备中。图书馆本身非常明确如何签署Json Web Token对象。

2)返回签名给用户的令牌,用户将在您需要身份验证的每个REST服务/端点的每个请求的Header内向您发送此令牌

3)您首先使用从用户处获得的令牌来验证签名(库也非常清楚如何执行此操作)。如果验证通过意味着令牌是可信任的,您可以继续使用您的应用程序。

关于JWT的一个很酷的事情是,您可以将非私有信息放在对您有用的令牌中,这样您就不必一直在数据库中查找它。例如,userId,用户电子邮件,令牌时间到期本身等

显然这些数据将作为base-64字符串传递给Token中的用户,所以可能如果他足够聪明,他可以解码它并看看里面是什么(他会看到他的userId,用户名或你放置的任何内容在令牌内部),但他无法处理的是签名。因此,如果他试图玩智能并更改令牌内的任何值并编码一个新的来破解你,你的令牌签名验证将失败,你可以继续你决定的任何惩罚..

在这里,您可以看到解码和编码的JWT内容的实例。

https://jwt.io/

希望这有帮助!

答案 1 :(得分:0)

您可以设置标题如下。

  HttpPost post = new HttpPost("someurl");
  post.addHeader(key1, value1));
  post.addHeader(key2, value2));

访问Setting Header in request header,了解有关在休息请求中设置标头的详细信息。