我正在尝试为基于AWS api网关之上的API实施身份验证和授权解决方案。为此,我尝试使用Cognito用户池。我想拥有多个客户端,并且第一个是前端单页应用程序。
Cognito用户池实现OpenID Connect。使用它,用户可以通过提供其凭据来生成一对(身份令牌,访问令牌),其中:
在这种情况下,根据multiple sources,客户端应将访问令牌发送到API才能执行操作。然后,API网关必须验证用户是否有权执行它,以及令牌具有关联的必需委托范围。
Amazon最近引入了feature,以将API网关与Cognito用户池集成在一起,我认为可以将其用于此目的。但是我没有找到直接的方法。
令我惊讶的第一件事是,默认情况下,它期望将身份令牌发送到API,而不是访问令牌。这符合OpenID Connect规范吗?
即使可以更改该行为以使其使用访问令牌,然后配置一组必须存在的范围才能授权请求。但是在那种情况下,我找不到任何附加方式来验证用户是否具有执行请求的操作所需的权限的附加逻辑。是否可以这样做,例如在验证范围之后调用lambda授权者?
最后,如果要验证给定访问令牌的用户权限,则必须使用令牌中的 sub 属性来请求用户声明。这将导致对userInfo端点的大量请求。相反,将那些声明包含在访问令牌本身中会很好。有什么办法吗?