oauth2.0 AWS AppSYnc -访问令牌与ID令牌-结果不同

dzjeubhm  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(197)

在Access与ID令牌中有很多主题,甚至协议文档也说
ID令牌永远不应发送给API。访问令牌永远不应被客户端读取。Source
现在我在使用AppSync时出现了一个非常奇怪和错误的行为,我在访问令牌的FE端使用,到目前为止一切都运行良好。我检查了AppSync控制台,它按预期工作。唯一的区别是,控制台使用ID令牌。
问题如下:

query MyQuery {
  Get {
    buildVersion
    distributor
    user {
      userID
      firstName
      lastName
    }
  }
}

// The resolver is a lambda and returns the following:
{
  "Get": {
    "buildVersion": 42666,
    "distributor": "Company A", // ctx.identity.claims['custom:distributor']
    "user": {
      "userID": "xxxxx-yyyy-zzzzzzzz", // ctx.identity.sub
      "firstName": "Hello",
      "lastName": "World",
    }
  }
}

// Now the AWS AppSync console (with ID token) returns the same object
{
  "data":   {
    "Get": {
      "buildVersion": 42666,
      "distributor": "Company A",
      "user": {
        "userID": "xxxxx-yyyy-zzzzzzzz",
        "firstName": "Hello",
        "lastName": "World",
      }
    }
  }
}

// And the FE (with Access token) has an issue
{
  "data":   {
    "Get": {
      "buildVersion": 42666,
      "distributor": null, // How come this is null???
      "user": {
        "userID": "xxxxx-yyyy-zzzzzzzz",
        "firstName": "Hello",
        "lastName": "World",
      }
    }
  }
}

我的第一个问题实际上是为什么这是一个东西?我的意思是好吧,使用ID令牌不是很好,但为什么不支持它。现在为什么结果不同?
额外的注意,我复制了两个请求作为curl,执行它们并得到与浏览器env相同的结果。然后我反转了令牌,这实际上与令牌绑定;使用访问标记返回null的查询将返回ID标记的值🤦‍
lambda在返回之前被记录,这种奇怪的“过滤”发生在AppSync端,没有chaching也没有任何外来配置😕
我不想在我的通信FE〈〉AppSync上使用ID令牌,因为您可以找到不同的原因,所以如果我错过了什么,我很乐意在解决方案中突出显示🙏
先谢了🙏

sycxhyv7

sycxhyv71#

“分销商”:“公司A”,//ctx.identity.claims ['custom:distributor']
这里的问题是,access_token 似乎不能包含自定义声明(在文档中不够清楚)-尽管它可以包含自定义范围。
因此,在这种情况下,“distributor”将为null。
About ID tokens
ID令牌可以包含OIDC标准声明中定义的OIDC标准声明。ID令牌还可以包含您在用户池中定义的自定义属性。Amazon Cognito将自定义属性值作为字符串写入ID令牌,而不考虑属性类型。
有一个问题,如果已经有了distributor字段,为什么还需要在查询中返回它?
希望有帮助。

相关问题