我需要使用Kong和OAuth来构建Web应用程序和其他一些API。
现在我有:
我需要:
根据关于孔的文件,我设计了一个资源所有者密码凭证一个。,它是这样的:
(这些API仅用于获取accessToken,无需验证方法)
(获得访问令牌)
是在第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 两者吗?
或者有什么我错过了或者我可以优化?
答案 0 :(得分:1)
Kong的文档在资源所有者密码授予方面颇具误导性。
此流程仍需要您实现授权服务器,其任务是:
请注意,这些都完全取决于您。
您的授权服务器最终实现了自己的/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服务器的Admin API)。
然后,您可以使用来自授权服务器的数据(即经过身份验证的用户ID和经过身份验证的范围),/oauth2/token
和provision_key
组合实际调用Kong POST https://kong:8443/yourapi/oauth2/token
grant_type=password&
client_id=(...)&
client_secret=(...)&
authenticated_userid=(...)&
authenticated_scope=(...)&
provision_key=(...)
端点。来自客户端应用程序的客户端凭据:
async.series([
function(callback) { ... },
function(callback) { ... }
]);
另请注意,如果您在其中存储客户端ID 和机密,即使用仅客户机密钥服务器端,则对Web应用程序保密至关重要。对于不受信任的应用程序(移动设备,SPA),可以让授权服务器检索客户端密钥以便与Kong一起使用,通过客户端ID进行秘密查找(也使用Kong Admin API)。
希望有所帮助,马丁