4

我需要使用 Kong 和 OAuth 来构建 Web 应用程序和其他一些 API。


我现在有:

  • Kong的服务器。
  • 服务器存储用户信息,例如 id、用户名、密码。将其命名为用户数据库。

我需要:

  • Web 应用程序和其他一些应用程序将使用带有 OAuth2.0 的 API;
  • API 仅由 Kong 提供。

根据 Kong 上的文档,我设计了一个资源所有者密码凭证,它是这样的:

(这些API只是为了获取accessToken,没有认证方法)

  1. 用户端发布用户名和密码到Kong
  2. Kong 将其路由到用户数据库。
  3. User-Database 验证用户名和密码,并向 Kong 发出请求。该请求将包括用户名、密码、provision_key、autherticated_userid。(*)
  4. Kong 将向 User-Database 响应 access_token,并且还会记住 autherticated_userid、access_token 和范围。Kong 会在访问令牌过期之前记住它们。
  5. User-Database 收到 Kong 的响应后,也会响应 step 1 和 2,最后 User-End 会得到 access-token 以备后用。

(获得访问令牌)

  1. 用户端将向需要身份验证的 API 发送请求。

在此处输入图像描述


在第 3 步有一些我无法理解的东西

根据关于Kong的文件:

$ curl https://your.api.com/oauth2/token \ --header "Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW" \ --data "client_id=XXX" \ --data "client_secret=XXX" \ --data "scope=XXX" \ --data "provision_key=XXX" \ --data "authenticated_userid=XXX" \ --data "username=XXX" \ --data "password=XXX"

The provision_key is the key the plugin has generated when it has been added to the API, while authenticated_userid is the ID of the end user whose username and password belong to.

我应该将所有用户的信息都存储到我的自我管理的用户数据库和 Kong吗?

或者有什么我错过的或者我可以优化的吗?

链接:Kong resource-owner-password-credentials

4

1 回答 1

2

Kong 的文档在资源所有者密码授予方面相当具有误导性。

这个流程仍然需要你实现一个授权服务器,其中的任务是:

  • 验证用户,在这种情况下使用提供的用户名和密码
  • 授权用户,即决定是否应该颁发访问令牌,并决定范围

请注意,这两件事完全取决于您。

您的授权服务器最终实现了自己的/authorize端点,它应该像这样工作:

您的客户端应用程序发布:

client_id=<your client id>&
client_secret=<your client secret>&
username=<...>&
password=<...>&
grant_type=password&
(optional: scope=space delimited scopes)

您的授权服务器通过 Kong Admin API 保留provision_key或检索它(取决于您的体系结构的外观以及您是否可以使用来自 Auth Server 的 Admin API)。

然后,您可以使用来自授权服务器的数据(即经过身份验证的用户 ID 和经过身份验证的范围)、来自客户端应用程序的客户端凭据来组装对 Kong/oauth2/token端点的实际调用:provision_key

POST https://kong:8443/yourapi/oauth2/token

grant_type=password&
client_id=(...)&
client_secret=(...)&
authenticated_userid=(...)&
authenticated_scope=(...)&
provision_key=(...)

另请注意,如果您将客户端 ID机密存储在其中,则网络应用程序的机密性至关重要,即仅在服务器端使用客户端机密。对于不受信任的应用程序(移动、SPA),可以让授权服务器通过客户端 ID 检索客户端密钥以与 Kong 一起使用(也使用 Kong Admin API)。

于 2016-12-05T11:28:06.630 回答