【发布时间】:2019-08-13 21:11:10
【问题描述】:
我正在使用名为 auth0 的外部服务来获取访问令牌并让我的用户使用我的 api。 Auth0 使用的是 Oauth2 协议。
简而言之,用户添加了用户名和密码,我正在使用 client_id(应用程序有一个 id)和 client_secret 调用 auth0,然后我得到一个 jwt 访问令牌作为回报。然后从那里我携带这个访问令牌来访问我自己的 api,因为我可以检查它的有效性。
我一直在寻找在客户端存储 client_id 和 client_secret 的安全性(例如 web (javascript)/mobile(本机或与 ionic 混合)),每个人都说它不安全,因为每个人都可以反转设计代码并获取 client_id 和 client_secret。好的...我可以接受...如果我没有凭据以获取访问令牌,我可以用它们做什么?
鉴于我不想存储 client_id 和 client_secret,我想到的一种解决方案是使用凭据直接调用我的 api (Java),然后我的 api 调用 auth0 并返回对应的访问令牌。这样,client_id 和 client_secret 就存储在后端,有人无法轻易获取它们。那安全吗?
但是我有一些端点,例如创建使用帐户,发送短信以进行电话验证等,不能有凭据。在这种情况下如何保护 api?如果我无法在客户端存储我自己的访问令牌,我如何获取访问令牌并在没有凭据的情况下访问我自己的 API?
谢谢
【问题讨论】:
-
我看到 OAuth2 服务器接受没有
client_secret或空的请求。如果这不可能,也许您可以使用令牌流而不是代码流。 -
嗨@martinstoeckli。你能给我任何链接吗?
-
我成功地用这种方式访问了 Google-Drive 和 One-Drive,看看github.com/martinstoeckli/SilentNotes/blob/master/src/… [第 149 和 102 行]。 Google documentation中也有信息。
标签: authentication oauth-2.0 authorization