试图了解如何使用Cognito和API网关来保护API。
到目前为止,我对AWS文档和Cognito用户界面的了解是这样:
客户
资源服务器
范围
同样,对API的权限非常简单。公开的www用户可以读取价格,管理员可以写入价格。
API网关
用户
基于此...
每个客户端都将请求其感兴趣的范围。因此,对于公共www网站,它将请求prices.read
,对于管理站点将请求prices.read
和prices.write
。 / p>
API网关将使用两个Cognito授权者,每个HTTP动词一个。因此,GET
方法必须检查用户可以读取价格和POST
方法以检查用户可以写入价格。
我看不到的一点是如何将所有这些放在一起。我可以使客户端请求范围,但是现在它们如何连接到用户权限?
生成令牌后,显示“好吧,您请求了这些作用域,现在我要检查此用户是否具有此权限并为您提供正确的令牌?”的功能在哪里?
我了解最终范围与将在令牌中返回的声明有关。例如,请求profile
范围意味着令牌将包含某些声明,例如email
,surname
等
我思考基于此,我的权限最终将最终是要求特定范围时返回的声明。这两个客户端请求的内容不同,这意味着prices write
声称永远不会将其返回给公共www客户端。如果请求prices.write
索赔,它将永远不会发出令牌。
我看不到它适合Cognito的地方。可以将用户分组,但仅此而已。同样,也没有(我可以看到)将范围与权利要求相关联。
我来自.Net和Identity Server背景。当然,在Identity Server的最新版本中,我看过有一个处理程序方法,您可以在其中确定要放入令牌中的声明。我想这会映射到Cognito中的自定义处理程序lambda函数之一。从那里开始,这将需要查询Cognito并确定要发出哪些声明?
难题的最后一部分是API网关如何检查声明。可以在API网关中完成此操作,还是需要在我将编写的用于处理API网关请求的Lambda函数中检查令牌?
某些情况下,使用Identity Server和.Net可以在API中使用一个客户端库来检查声明和相应的编辑权限。猜猜Node JS Lambda函数中有类似的东西吗?
一些假设,因为我基本上是在黑暗中。我认为这里有基础,但不确定如何将所有内容连接在一起。
希望有人已经弄清楚了。