使用自我管理的用户数据库需要有关 Kong 和 OAuth 的帮助
Need help about Kong and OAuth with self-managed user-database
我需要使用 Kong 和 OAuth 来构建网络应用程序和一些其他 API。
现在我有:
- Kong 的服务器。
- 服务器存储用户信息,如id、用户名、密码。将其命名为用户数据库。
我需要:
- Web 应用程序和其他一些应用程序将使用 OAuth2.0 的 API;
- API 仅由 Kong 提供。
根据Kong上的文档,我设计了一个Resource Owner Password Credential one.,是这样的:
(这些API只是为了获取accessToken,没有认证方式)
- 用户端postKong的用户名和密码
- Kong 将其路由到用户数据库。
- User-Database 验证用户名和密码,post 向 Kong 发出请求。该请求将包括用户名、密码、provision_key、autherticated_userid。 (*)
- Kong 将向用户数据库响应 access_token,并且还会记住 autherticated_userid、access_token 和范围。 Kong 会在访问令牌过期之前记住它们。
- User-Database收到Kong的响应后,也会对step 1&2进行响应,最后User-End会得到access-token以备后用。
(获得访问令牌)
- 用户端将向需要认证的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 的文档在资源所有者密码授予方面具有误导性。
这个流程还需要你实现一个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)。
我需要使用 Kong 和 OAuth 来构建网络应用程序和一些其他 API。
现在我有:
- Kong 的服务器。
- 服务器存储用户信息,如id、用户名、密码。将其命名为用户数据库。
我需要:
- Web 应用程序和其他一些应用程序将使用 OAuth2.0 的 API;
- API 仅由 Kong 提供。
根据Kong上的文档,我设计了一个Resource Owner Password Credential one.,是这样的:
(这些API只是为了获取accessToken,没有认证方式)
- 用户端postKong的用户名和密码
- Kong 将其路由到用户数据库。
- User-Database 验证用户名和密码,post 向 Kong 发出请求。该请求将包括用户名、密码、provision_key、autherticated_userid。 (*)
- Kong 将向用户数据库响应 access_token,并且还会记住 autherticated_userid、access_token 和范围。 Kong 会在访问令牌过期之前记住它们。
- User-Database收到Kong的响应后,也会对step 1&2进行响应,最后User-End会得到access-token以备后用。
(获得访问令牌)
- 用户端将向需要认证的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 的文档在资源所有者密码授予方面具有误导性。
这个流程还需要你实现一个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)。