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 内容解码和编码的实时示例。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
5184 次 |
| 最近记录: |