使用自我管理的用户数据库需要有关 Kong 和 OAuth 的帮助

Need help about Kong and OAuth with self-managed user-database

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


现在我有:

我需要:


根据Kong上的文档,我设计了一个Resource Owner Password Credential one.,是这样的:

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

  1. 用户端postKong的用户名和密码
  2. Kong 将其路由到用户数据库。
  3. User-Database 验证用户名和密码,post 向 Kong 发出请求。该请求将包括用户名、密码、provision_key、autherticated_userid。 (*)
  4. Kong 将向用户数据库响应 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 两者

或者我遗漏了什么或者我可以优化什么?

Link:Kong resource-owner-password-credentials

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

这个流程还需要你实现一个Authorization Server,其任务是:

  • 验证用户身份,在本例中使用提供的用户名和密码
  • 给用户授权,即决定是否颁发access token,决定范围

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

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

您的客户端应用帖子:

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

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

然后你可以 assemble 使用来自授权服务器的数据(即经过身份验证的用户 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 秘密,即仅在服务器端使用客户端秘密,则 Web 应用程序的机密性至关重要。对于不受信任的应用程序(移动设备、SPA),可以让授权服务器检索用于 Kong 的客户端机密,通过客户端 ID 进行秘密查找(也使用 Kong Admin API)。