我们计划在我们的系统中使用 OAuth 2.0,但我们对安全级别感到不舒服。OAuth 2 成为行业标准,所以我怀疑我们可能会遗漏一些东西 :-)
我们需要保护系统 API;有些 API 公开了对用户信息的访问权限,有些则没有。用户可以在没有登录的情况下使用该系统,并且在以后进行需要他的身份验证的操作时,他需要提供他的凭据。
因此,我们将首先使用客户端凭据授权授权来识别客户端。我们更喜欢这种模式,因为使用密钥看起来更安全。客户端是加载到用户代理的 java 脚本应用程序。流程是:
- 用户代理请求应用程序的后端加载应用程序
- 客户端的后端会调用授权服务器对客户端进行授权。它将提供 client_id 和 secret_key。成功后将发出访问令牌。
- 将加载到客户端的应用程序将包含访问令牌。
- 客户端将使用令牌访问系统 API
问:任何人都可以使用应用程序的 URL。如果您加载应用程序,您将拥有访问令牌。您无需提供客户端 ID 或任何秘密……它就在那里。那么安全在哪里呢?
对于需要识别用户的情况,我们考虑使用隐式授权授予。在这种情况下,我们不使用密钥,因为它不是客户端的秘密。但是,任何知道 client_id 并拥有注册用户的人都可以获得访问令牌。
问:那么,问题又是关于安全性的,我们怎么知道访问系统的客户端是真正的客户端?
谢谢,
阿维拉姆