问题
在高层,我希望基于用户特定的Cognito提供的身份来授权应用程序中的某些功能。
更具体地说,我希望在EC2-主机Tomcat应用程序中实现这一点,而不依赖于API网关。
示例
例如,我的RESTful服务可能在helloworld.com/tastyTreats/foo
和/tastyTreats/bar
上有资源。我只想在数据库中列出tastyTreat
为特定Cognito标识符所有时允许对这些资源进行写访问。
假设数据库看起来像这样:
{"TreatName":"foo", "Owner":"Alice"},
{"TreatName":"bar", "Owner":"Bob"},
...
因此,Cognito标识为Bob的用户应该具有对helloworld.com/tastyTreats/bar
的写访问权限,但在访问/tastyTreats/foo
时应该达到403。
我希望能够在我的EC2实例中执行此授权,因为它(本质上)具有无限的灵活性。而且,如果可行的话,我希望避免推出API网关的要求——这是一个非常小的应用程序,我希望尽可能简单。
提供此功能的其他AWS服务
除了直接EC2之外的其他服务提供了根据实际身份改变行为的能力:
- API网关似乎允许访问映射模板中的此标识
- 通常,您可以基于此标识自定义策略,但此功能转换标识的能力似乎有限
谢谢
如果使用Cognito标识池,您将无法从EC2实例中独立完成此操作。这只能通过其他AWS服务(如API网关标识属性)获得。如果您使用的是Cognito用户池,那么这是一个标准的JWT/JWK实现(我相信使用OIDC),所以您可以从EC2实例中自己实现它。