只是阅读docs,它们看起来与我非常相似,所以我无法辨别为什么要使用其中一个。虽然身份令牌似乎更好,因为它在用户池中具有自定义属性(例如:custom:blah
以及默认值name
和email
)。
现在,我正在使用一个将访问令牌传递回浏览器的应用程序,以便它可以使用它来进行ajax REST调用(有一个auth过滤器需要此访问令牌并验证它)。我可以用id令牌切换访问令牌吗?当前的验证逻辑是从访问令牌中获取sub
字段(uuid),但此sub
字段也存在于身份令牌中(以及除{之外的几乎所有其他属性) {1}}我不需要)。我只是想确保我理解这一点,因为令我困惑的是为什么两个令牌都存在并且看起来如此相似。
答案 0 :(得分:10)
id_token是供您的应用程序处理的,因此您可以获取用户的所有个人详细信息,例如他们的姓名,年龄,电子邮件地址等。一般来说,您不应该将此令牌发送到其他任何地方,因为它包含敏感的用户数据。
access_token用于呼叫其他'外部'服务(以及外部我包括其他AWS服务 - 这些服务通常通过http调用)。它为您的用户提供服务访问授权,而无需包含他们的个人详细信息。
从表面上看,这看起来有点令人困惑,因为您实际上可以使用id_token以与access_token相同的方式访问服务。但是,良好的做法是在这种情况下使用access_token,如果后端服务需要用户数据,他们应该在Cognito中自行查找。
答案 1 :(得分:0)
从文档中对我来说区别不明显的事情:
如果您正在使用 pretoken
触发器函数并希望使用 claimsToAddOrOverride
向声明添加其他信息,则需要使用 id 令牌,因为访问令牌中不存在此信息。
例如:
event.response = {
claimsOverrideDetails: {
claimsToAddOrOverride: {
'userProfileID': id,
}
},
}
我希望它在 AppSync 解析器中使用 lambda 函数作为源