【问题标题】:Group authorization in AppSync using IAM authenticationAppSync 中使用 IAM 身份验证的组授权
【发布时间】:2018-09-28 19:14:18
【问题描述】:

我的服务需要用户组来授权访问数据。

AppSync 文档中的组授权示例基于用户池声明。我正在使用 IAM 身份验证,因此 $context.identity 不包含声明或任何类似信息。

例如,参见主题“用例:组可以创建新记录”: https://docs.aws.amazon.com/appsync/latest/devguide/security-authorization-use-cases.html

#set($expression = "")
#set($expressionValues = {})
#foreach($group in $context.identity.claims.get("cognito:groups"))
    #set( $expression = "${expression} contains(groupsCanAccess, :var$foreach.count )" )
    #set( $val = {})
    #set( $test = $val.put("S", $group))
    #set( $values = $expressionValues.put(":var$foreach.count", $val))
    #if ( $foreach.hasNext )
    #set( $expression = "${expression} OR" )
    #end
#end
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key" : {
        ## If your table's hash key is not named 'id', update it here. **
        "id" : { "S" : "$context.arguments.id" }
        ## If your table has a sort key, add it as an item here. **
    },
    "attributeValues" : {
        ## Add an item for each field you would like to store to Amazon DynamoDB. **
        "title" : { "S" : "${context.arguments.title}" },
        "content": { "S" : "${context.arguments.content}" },
        "owner": {"S": "${context.identity.username}" }
    },
    "condition" : {
        "expression": "attribute_not_exists(id) OR $expression",
        "expressionValues": $utils.toJson($expressionValues)
    }
}

我希望只从用户表中检查用户是否在授予此权限的组中。但是,DynamoDB 条件似乎不支持查询其他表。

【问题讨论】:

  • 在使用 IAM 身份验证时,目前获得正确授权的唯一方法可能是使用 Lambda 数据源。这是令人失望的。我希望这方面很快会有进展。
  • 如果您使用 Cognito 用户池获取组信息,您可以使用 IAM 身份验证,也可以将 JWT 令牌传递给将保留在标头中的 API,在这种情况下您将有权访问组信息。查看合并到 Amplify 库中的以下更改(考虑到您正在使用的内容):github.com/awslabs/aws-mobile-appsync-sdk-js/pull/121
  • 这个 Mikael 运气好吗?我面临着类似的问题。
  • 有人解决了这个问题吗?

标签: amazon-dynamodb aws-appsync


【解决方案1】:

今天我正在使用与您的要求类似的东西。为此,我在放大请求中添加了一个自定义标头,其中包含来自 Cognito 用户池的 JWT 令牌。就我而言,我在 lambda 解析器中解析 JWT。对于您的情况,您需要在前端解析 JWT 令牌并在自定义标头中将其解析(和编码)发送。在您的解析器中,您可以解码标头值并从声明中提取组。

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 2017-11-23
    • 2011-09-27
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多