AWS 按身份验证用户放大访问组

问题描述 投票:0回答:1

您好,我在 amplify studio 中的用户管理下添加了一个组管理员,并向该组添加了一个用户。如果当前经过身份验证的用户是否在组中,我现在可以在代码中访问哪里?

amazon-web-services aws-amplify
1个回答
0
投票

在前端(react)你可以看一下

cognito:groups
。下面的代码片段。

请记住,任何人都可以在前端授予自己“管理员”权限,因此请确保后端 CRUD 操作是确定某人是否在组中的事实来源。例如在代码中硬编码“isAdmin = true”,然后以非管理员用户身份登录,并确保所有错误都正确显示,并且您不能执行任何恶意行为。

export const AppRoutes = ({ user, signOut }: { user: AmplifyUser, signOut: (data?: Record<string | number | symbol, any> | undefined) => void }) => {
  const groups: Array<string> = user.getSignInUserSession()?.getAccessToken().payload["cognito:groups"] || []
  const isAdmin = -1 !== groups.findIndex(group => group === "ROLE_ADMIN")

  // You do you...

在后端,如果您使用的是基于 Lambda 的 GraphQL 解析器,则可以从前端请求中获取

authorization
标头,并将其作为后端 AppSync 和其他 API 的
authorization
标头传递调用,以便它们将以与登录用户相同的权限执行。 (或者,您可能希望
sts:AssumeRole
以便整个 lambda 在该登录用户的权限范围内运行。)

您可以从传递到 Lambda 处理程序的上下文中获取 auth 标头。它是以下代码片段中的

ctx

const recipients = await getRecipients({
    authorization: ctx.request?.headers.authorization,
    audience: ctx.arguments.audience,
    username: ctx.identity?.username
})
© www.soinside.com 2019 - 2024. All rights reserved.