如何在API网关中检查Cognito权限

时间:2018-11-17 20:39:14

标签: amazon-web-services oauth amazon-cognito

试图了解如何使用Cognito和API网关来保护API。

到目前为止,我对AWS文档和Cognito用户界面的了解是这样:

客户

  • www-public-面向公众的网站
  • www-admin-管理员网站

资源服务器

  • 价格-在此简单示例中,API将提供对该资源的安全访问。

范围

  • prices.read
  • prices.write

同样,对API的权限非常简单。公开的www用户可以读取价格,管理员可以写入价格。

API网关

  • 获取/价格-可以读取价格的经过身份验证的用户可以访问。
  • POST /价格-仅管理员可以访问

用户

  • 管理员-可以通过POST方法更新价格。
  • 非管理员-无法更新价格。

基于此...

  • 每个客户端都将请求其感兴趣的范围。因此,对于公共www网站,它将请求prices.read,对于管理站点将请求prices.readprices.write。 / p>

  • API网关将使用两个Cognito授权者,每个HTTP动词一个。因此,GET方法必须检查用户可以读取价格和POST方法以检查用户可以写入价格。

我看不到的一点是如何将所有这些放在一起。我可以使客户端请求范围,但是现在它们如何连接到用户权限?

生成令牌后,显示“好吧,您请求了这些作用域,现在我要检查此用户是否具有此权限并为您提供正确的令牌?”的功能在哪里?

我了解最终范围与将在令牌中返回的声明有关。例如,请求profile范围意味着令牌将包含某些声明,例如emailsurname

思考基于此,我的权限最终将最终是要求特定范围时返回的声明。这两个客户端请求的内容不同,这意味着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函数中有类似的东西吗?

一些假设,因为我基本上是在黑暗中。我认为这里有基础,但不确定如何将所有内容连接在一起。

希望有人已经弄清楚了。

0 个答案:

没有答案