在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令牌,因为您可以找到不同的原因,所以如果我错过了什么,我很乐意在解决方案中突出显示🙏
先谢了🙏
1条答案
按热度按时间sycxhyv71#
“分销商”:“公司A”,//ctx.identity.claims ['custom:distributor']
这里的问题是,access_token 似乎不能包含自定义声明(在文档中不够清楚)-尽管它可以包含自定义范围。
因此,在这种情况下,“distributor”将为null。
About ID tokens:
ID令牌可以包含OIDC标准声明中定义的OIDC标准声明。ID令牌还可以包含您在用户池中定义的自定义属性。Amazon Cognito将自定义属性值作为字符串写入ID令牌,而不考虑属性类型。
有一个问题,如果已经有了
distributor
字段,为什么还需要在查询中返回它?希望有帮助。