如何在不前置 API 网关的情况下从 EC2 托管的应用程序访问 Cognito 身份?

How to access Cognito identity from an EC2-hosted application without fronting API Gateway?

问题

在较高级别,我想根据用户的特定 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 时应该 hit a 403

我希望能够在我的 EC2 实例中执行此授权,因为它(本质上)具有无限的灵活性。而且,如果可行的话,我想避免滚动 API Gateway 的要求——这是一个非常小的应用程序,我想让事情尽可能简单。

提供此功能的其他 AWS 服务

除直接 EC2 之外的其他服务提供了根据实际身份改变行为的能力:

谢谢!

如果您使用 Cognito 身份池,您将无法通过 EC2 实例自行执行此操作。这只能通过 API 网关身份属性等其他 AWS 服务获得。如果您使用的是 Cognito 用户池,那么这是一个标准的 JWT/JWK 实现(我相信使用 OIDC),因此您可以从 EC2 实例中自己实现它。