我有一个通过netflix部署的带有Cognito身份验证的Jamstack站点。目标应该是只有一个代码库和一个用户池,其中为应用程序的每个团队预定义了组。每个已部署版本的代码库都被路由到各自团队的URL。一个团队包括经理、编辑等角色;员工和由我自己设置,第一个用户有经理的角色,通过管理api管理和注册应用程序内的进一步用户。如何解决登录时无法知道用户所属团队的正确用户池的问题?
无码解
Amplify可以很容易地部署到多个环境中,例如开发、测试、生产。你可以使用这种机制来部署每个"团队"。融入自己的环境。这也为每个团队提供了一个唯一的URL。
这种方法的主要缺点是每个团队都有自己的环境(可能是他们自己的git分支),所以在所有团队中部署更改会很烦人。
除非你只有2-3个团队,否则我不会推荐以上方法。
直接使用groups
另一种方法是使用GROUPS来区分团队和角色。例如,为每个团队添加组:TEAM_xxxx,角色:ROLE_ADMIN、ROLE_MANAGER、ROLE_EDITOR、ROLE_STAFF。所有数据都是共存的,但是您可以使用组授权来限制每个团队和角色的数据可见性。
您可以为站点提供多个域。我不确定如何强制每个团队使用"他们的";域,但这应该无关紧要,因为他们只能看到/更改他们所属团队的数据。
当新用户注册时,添加他们使用的域作为认知自定义属性,并在认证钩子中检查它。如果一切正常,将该用户添加到"待定审批"数据库表中,并向该团队的经理发送电子邮件。管理员登录时看到待审批用户,然后批准/拒绝用户。使用ROLE_MANAGER的用户可以将其他人添加到他们自己所属的任何组,显然是在服务器端完成的。
我已经为"穷人的多租户"做了上述工作。w/Amplify,效果非常好。
如果你不能容忍跨团队共享的数据只有权限分隔,那么你可能想要放弃Amplify并使用CDK来部署每个团队的代码库和所有资源。
使用单个用户池仅用于身份验证(登录)。为每个团队创建身份池(联邦身份),并使用自定义身份验证方法根据身份池对用户进行身份验证。然后为授权使用身份池身份(授予权限)。
https://docs.aws.amazon.com/cognito/latest/developerguide/concepts.htmlhttps://docs.aws.amazon.com/cognito/latest/developerguide/developer-authenticated-identities.html