生成Oauth1.0a签名的Java库

jos*_*t91 2 java oauth scribe apache-httpclient-4.x

我对 Oauth 很陌生,但需要学习如何在 Java 中执行此操作,以便我们可以对 REST 请求进行身份验证。这是我到目前为止所得到的。

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

final OAuth10aService service = new ServiceBuilder()
      .apiKey("key")
      .apiSecret("secret")
      .build(TestApi.instance());
Run Code Online (Sandbox Code Playgroud)

这不起作用。经过大量挖掘后,似乎因为我们使用的是自签名证书,所以我无法访问远程主机。我收到一条错误消息,表示连接到远程服务时出现问题。ScribeJava 似乎没有办法禁用使用自签名证书的验证。

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

作为参考,我们已经使用 Python 成功进行了良好的 Oauth REST 调用,如下所示:

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

myResponse = requests.get("endpoint_here", auth=headeroauth, verify=False)
Run Code Online (Sandbox Code Playgroud)

关于如何使用 Java 完成同样的事情有什么建议吗?

小智 5

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

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

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

1)当用户尝试登录时,验证他的用户名和密码,如果成功,则生成一个使用存储在后端的密钥签名的 JWT 。该库本身非常清楚如何签署 Json Web Token 对象。

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

3)首先使用从用户那里获得的令牌来验证签名(图书馆也非常清楚如何做到这一点)。如果验证通过,则意味着该令牌是可信的,您可以继续使用您的应用程序。

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

显然,这些数据将以 base-64 字符串的形式发送给令牌内的用户,所以如果他足够聪明,他可能可以对其进行解码并查看里面的内容(他将看到他的 userId、用户名或您在令牌内放置的任何内容) ),但他无法处理的是签名。因此,如果他试图聪明地改变令牌内的任何值并编码一个新值来攻击您,您的令牌签名验证将失败,您可以继续执行您决定的任何惩罚。

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

https://jwt.io/

希望这可以帮助!